3-3.8 Dockerfile 指令詳解之二
上一篇文章介紹了Dockerfile指令詳解之一,包括:
目錄
上一篇文章介紹太詳細,接下來將簡單介紹:ARG 構建引數、VOLUME 定義匿名卷、EXPOSE 宣告埠、WORKDIR 指定工作目錄、USER 指定當前使用者、HEALTHCHECK 健康檢查、ONBUILD 定製映象、SHELL 。
1. ARG 構建引數
指定一些映象內使用的引數(如版本號資訊等),這些引數在執行 docker build 命令時才以 --build-arg <key>=<value> 格式傳入。
格式為 ARG <name> [=<default value>].
那麼可以用 docker build --build-arg <key>=<value> 來指定引數值。
2. VOLUME 定義匿名卷
建立一個數據卷掛載點。
格式為 VOLUME ["/data"].
可以從本地主機或其他容器掛載資料卷,一般用來存放資料庫和需要儲存的資料等。
3. EXPOSE 宣告埠
宣告映象內服務所監聽的埠。
格式為 EXPOSE <port> [<port>...]
例如:
EXPOSE 22 80 8443
注意,該指令只是起到宣告的作用,並不會自動完成埠對映。
在啟動容器時需要使用 -P 。Docker主機會自動分配一個宿主機的臨時埠轉發到指定的埠;使用 -P ,則可以具體指定哪個宿主機的本地埠對映到容器中。
4. WORKDIR 指定工作目錄
為後續的 RUN 、CMD和ENTRYPOINT
格式為 WORKDIR /path/to/workdir 。
可以使用多個 WORKDIR 指令,後續命令如果引數是相對路徑,則會基於之前命令指定的路徑,例如:
WORKDIR /opt
WORKDIR stack
WORKDIR nova
RUN pwd
則最終路徑為 /opt/stack/nova 。
5. USER 指定當前使用者
指定執行容器時的使用者名稱和UID,後續的 RUN 等指令也會使用指定的使用者身份。
格式為 USER daemon
當服務不需要管理員許可權時,可以通過該命令指定執行使用者,並且可以在之前建立所需要的使用者,例如:
RUN groupadd -r postgres && useradd -r -g postgres postgres
要臨時獲取管理員許可權可以使用 gosu 或 sudo。
6. HEALTHCHECK 健康檢查
配置所啟動容器如何進行健康檢查(如何判斷健康與否)。
格式有兩種:
- HEALTHCHECK [OPTIONS] CMD COMMAND:根據所執行的命令返回值是否為0來判斷。
- HEALTHCHECK NONE:禁止基礎映象中的健康檢查。
OPTIIONS 支援:
- --interval=DURATION (預設為30s):每隔多長時間檢查一次。
- --timeout=DURATION(預設為30s):每次檢查等待結果的超時時間。
- --retries=N(預設為3):若開始時就失敗了,重試幾次才最終確定失敗。
7. ONBUILD 定製映象
配置當所建立的映象作為其他映象的基礎映象時,所至執行的建立操作指令。
格式為:ONBUILD [INSTRUCTIONS]
例如,Dockerfile使用如下的內容建立映象 image-A。
[..]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[..]
如果基於 image-A 建立新的映象時,新的Dockerfile 中使用 FROM image-A 指定基礎映象,會自動執行 ONBUIDL 指令的內容,等價於後面添加了兩條指令:
FROM image-A
#當指定了ONBUILD建立的映象時,會自動執行以下命令
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
8. SHELL
指定其他命令使用shell 是預設的shell型別。
SHELL ["executable", "parameters"]
預設值為["/bin/sh", "-c"]。