前言
書接上文,關於dockerfile指令的api在此處不做贅述,在此只是記錄下注意事項: ‘示坑以埋之’。
配置指令
FROM
- dockerfile必須以此開頭
- 一個dockerfile可執行添加多個FROM
ARG
- 單純的docker build執行過程的局部變量,在容器內部會被銷燬
- 常用來定義常量數據,例如版本等等
LABEL
- label的作用只是用來便於做搜索推薦、提示等,類似元信息、元標籤。
- 多個label多行展示
LABEL name=tate
LABEL area=China
EXPOSE
- 只聲明鏡像內監聽的服務端口,不做映射處理
EXPOSE 22 80 8443
ENV
- 環境變量,在後續RUN中被調用,容器中會被保留。
ENV APP_HOME=/usr/local/app
- 若遇到相同變量,在Run命令中會被覆蓋掉
docker run --env APP_HOME=/usr/local/app
ENTRYPOINT
# ENTRYPOINT ["executable", "paraml ", "param2"]: exec 調用執行;
# ENTRYPOINT command param 1 param2: shell 中執行。
- 指定鏡像的默認入口命令,該入口命令會在啓動容器時作爲根命令執行, 所有傳人值作爲該命令的參數。
- CMD指定的值將作爲根命令的參數傳遞
- 單個dockerfile中定義多個入口時,只有最後一個生效。
- 同樣可被run中的 --entrypoint 參數覆蓋
VOLUME
- 創建數據掛載點
VOLUME ["/data"]
USER
- 指定運行容器的user,需要獲取管理員臨時權限時使用gosu命令
WORKDIR
- 爲後續的 RUN CMD ENTRYPO INT 指令配置工作目錄
- 多行命令執行結果累加, 建議使用絕對路徑
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 結果爲 /a/b/c
ONBUILD
- 基於所生成鏡像創建子鏡像時,自動執行的操作指令。
- 使用 docker build 命令創建子鏡像 childImage 時( FROM ParentImage ),會首先執行 Parent mage 配置的 ONBUI LD,相當於在子鏡像的dockerfile中添加相應的指令。
- 主要用於創建專門用於自動編譯、檢查等操作的基礎鏡像。
STOPSIGNAL
- 指定所創建鏡像啓動的容器接收退出的信號值
HEALTHCHECK
- 配置所啓動容器如 進行健康檢查
HEALTHCHECK [OPTIONS] CMD command :根據所執行命令返回值是否爲0判斷
HEALTHCHEC NONE : 禁止基礎鏡像中的健康檢查
OPTION 支持如下參數
—interva=DURAT (d e fault: 30s ):過多久檢查一次
—timeout=DURATION (default: 30s): 每次檢查等待結果的超時;
—retries=N (default:3 ):如果失敗了,重試幾次才最終確定失敗
SHELL
- 指定其他命令使用 shell 時的默認 shell 類型
- 默認值
SHELL ["/bin/sh", "-c"]
- windows 系統中,shell 使用了“\”作爲分隔符,建議在 Dockerfile 開頭添加#escape=' 指定轉義符
操作指令
RUN
- 格式爲 RUN <command >或 RUN [ "executable " , "paraml", "param2"] 注意意後者指令會被解析爲 JSON 數組,因此必須用雙引號,前者默認將在 shell 終端中運行命令,即 '/bin/bash -c' 後者則使用 exec 執行,不會啓動 shell 環境。
- 指定使用默認終端
RUN ["/bin/bash", "-c", "echo tate"]
- 每執行一條RUN命令, 鏡像就會被追加一個鏡像層,其實就是一個RUN命令就是一個獨立的執行結果
CMD
- CMD 指令用來指定啓動容器時默認執行的命令
- 支持三種格式:
- CMD ["executable", "param1", "param2"]:相當於執行 executable param1 param2, 此方式較爲推薦;
- CMD command paraml param2 :在默認的 Shell 中執行,提供給需要交互的應用;
- CMD ["param1", "param2"]: 提供給 ENTRYPOINT 的默認參數
ADD
- 添加指定路徑下的內容到容器中 ADD
- src可爲文件目錄,也可爲url,或一個tart文件(自動解壓爲目錄)
- dest可以使絕對路徑,也可以是相對於當前工作目錄的相對路徑
COPY
- 複製內容到路徑 COPY
, 多用於本地目錄爲源目錄時。 - src 爲dockerfile所在目錄的相對路徑
- 目標路徑不存在時會自動創建
- 路徑支持正則表達式
體驗嚐鮮
基於alpine定製
FROM alpine
ARG author=tate
RUN touch /root/docker.txt
COPY copy.sh /root/