Dockerfile 文件詳解

使用 Dockerfile 可以允許用戶創建自定義的鏡像。

基本結構

一般的,Dockerfile 分爲四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啓動時執行指令。

FROM

格式爲FROM <image>FROM <image>:<tag>

第一條指令必須爲 FROM 指令。並且,如果在同一個Dockerfile中創建多個鏡像時,可以使用多個 FROM指令(每個鏡像一次)。

MAINTAINER

格式爲 MAINTAINER <name> ,指定維護者信息。

RUN

格式爲 RUN <command>RUN ["executable", "param1", "param2"]

前者將在 shell 終端中運行命令,即 /bin/sh -c ;後者則使用 exec 執行。指定使用其它終端可以通過

第二種方式實現,例如 RUN ["/bin/bash", "-c", "echo hello"]

每條 RUN 指令將在當前鏡像基礎上執行指定命令,並提交爲新的鏡像。當命令較長時可以使用 \ 來換行。

CMD

支持三種格式
1. CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;
2. CMD command param1 param2 在 /bin/sh 中執行,提供給需要交互的應用;
3. CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數;

指定啓動容器時執行的命令,每個 Dockerfile 只能有一條 CMD 命令。如果指定了多條命令,只有最後一條會被執行。
如果用戶啓動容器時候指定了運行的命令,則會覆蓋掉 CMD 指定的命令。

EXPOSE

格式爲 EXPOSE <port> [<port>...]

告訴 Docker 服務端容器暴露的端口號,供互聯繫統使用。在啓動容器時需要通過 -P,Docker 主機會自動分配一個端口轉發到指定的端口。

ENV

格式爲 ENV <key> <value>

指定一個環境變量,會被後續 RUN 指令使用,並在容器運行時保持。

ADD

格式爲 ADD <src> <dest>

該命令將複製指定的 到容器中的 。 其中 可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個 tar 文件(自動解壓爲目錄)。

COPY

格式爲 COPY <src> <dest>

複製本地主機的 (爲 Dockerfile 所在目錄的相對路徑)到容器中的 。
當使用本地目錄爲源目錄時,推薦使用 COPY 。

ENTRYPOINT

兩種格式:
1. ENTRYPOINT ["executable", "param1", "param2"]
2. ENTRYPOINT command param1 param2 (shell中執行)

配置容器啓動後執行的命令,並且不可被 docker run 提供的參數覆蓋。
每個 Dockerfile 中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效。

VOLUME

格式爲 VOLUME ["/data"]

創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等。

USER

格式爲 USER daemon

指定運行容器時的用戶名或 UID,後續的 RUN 也會使用指定用戶。
當服務不需要管理員權限時,可以通過該命令指定運行用戶。並且可以在之前創建所需要的用戶,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres。要臨時獲取管理員權限可以使用 gosu ,而不推薦 sudo 。

WORKDIR

格式爲 WORKDIR /path/to/workdir

爲後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄。
可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑。

ONBUILD

格式爲 ONBUILD [INSTRUCTION]

配置當所創建的鏡像作爲其它新創建鏡像的基礎鏡像時,所執行的操作指令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章