1. 程式人生 > >3-3.8 Dockerfile 指令詳解之二

3-3.8 Dockerfile 指令詳解之二

上一篇文章介紹了Dockerfile指令詳解之一,包括:

FROM 指定基礎映象

RUN 執行命令

COPY 複製檔案

ADD 更高階的複製檔案

CMD 容器啟動命令

ENTRYPOINT 入口點

ENV 設定環境變數

目錄

1. ARG 構建引數

2. VOLUME 定義匿名卷

3. EXPOSE 宣告埠

4. WORKDIR 指定工作目錄

5. USER 指定當前使用者

6. HEALTHCHECK 健康檢查

 7. ONBUILD 定製映象

8. SHELL


上一篇文章介紹太詳細,接下來將簡單介紹: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"]。