閱讀885 返回首頁    go 阿裏雲


Dockerfile 支持的指令__構建管理_用戶指南_容器服務-阿裏雲

有用戶容易將 Dockerfile 文件內的指令理解為 shell 腳本,其實並不是,Dockerfile 僅支持少部分的指令,下麵介紹這些指令和功能。

FROM

  1. FROM <image>

或者

  1. FROM <image>:<tag>

或者

  1. FROM <image>@<digest>

指定構建依賴的基礎鏡像,FROM 指令必須作為 Dockerfile 中第一條沒有被注釋的指令。

MAINTAINER

  1. MAINTAINER <name>

指定鏡像的 Author 字段。

RUN

shell 形式,command 作為 /bin/sh -c 的參數進行執行,即為 shell 的子進程。

  1. RUN <command>

exec 形式,直接執行。

  1. RUN ["executable", "param1", "param2"]

RUN 指令是在當前鏡像上執行命令,並且提交執行之後的結果,作為最新的一層 layer,並且後續的 Dockerfile 指令會在 RUN 指令執行完生成的最新鏡像上繼續執行。

CMD

exec 形式,直接執行,推薦使用該形式。

  1. CMD ["executable","param1","param2"]

第二種形式,作為ENTRYPOINT指令的默認參數。

  1. CMD ["param1","param2"]

第三種形式,shell形式,作為/bin/sh -c的參數進行執行,即為 shell 的子進程。

  1. CMD command param1 param2

在一個 Dockerfile 文件中,隻能有一個CMD指令,如果有多於一條CMD指令,那隻有最後一條CMD指令會生效。

CMD指令的主要目的是提供容器運行時的默認值,這些默認值可以包括一個可執行文件名,加上執行時的一些參數,或者不包含可執行文件名,隻提供參數,但是必須通過增加一個ENTRYPOINT指令來指定可執行文件名。

LABEL

  1. LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL指令給一個鏡像增加元信息metadata。一個LABEL是一個鍵值對。如果LABEL值中需要包含空格或者換行符,使用雙引號"或者反斜杠

下麵是一些用例:

  1. LABEL "com.example.vendor"="ACME Incorporated"
  2. LABEL com.example.label-with-value="foo"
  3. LABEL version="1.0"
  4. LABEL description="This text illustrates
  5. that label-values can span multiple lines."

EXPOSE

  1. EXPOSE <port> [<port>...]

EXPOSE指令設置 Docker 容器在運行時監聽指定網絡端口。EXPOSE指令並不會使得容器所在的主機可以訪問容器的端口。為了使主機可以訪問容器端口,必須使用 -p 或者 -P 參數。

ENV

  1. ENV <key> <value>
  2. ENV <key>=<value> ...

ENV指令設置鏡像的環境變量,可在實際啟動容器時使用docker run --env <key>=<value>進行覆蓋。

ADD

有兩種形式:

  1. ADD <src>... <dest>

第二種形式用於路徑或者文件名包含空格的情況。

  1. ADD ["<src>",... "<dest>"]

如果src是文件路徑,則必須是相對於構建上下文context的相對路徑,且不能引用構建上下文目錄之外的內容。dest必須是絕對路徑,或者是工作路徑WORKDIR的相對路徑。如果dest不存在,則將自動創建,如果dest不以/結尾,則將被認為是一個文件,而不是目錄。

COPY

有兩種形式:

  1. COPY <src>... <dest>

第二種形式用於路徑或者文件名包含空格的情況。

  1. COPY ["<src>",... "<dest>"]

ADD類似,區別在於src不能是網絡鏈接 URL。

ENTRYPOINT

exec 形式,推薦使用該形式。

  1. ENTRYPOINT ["executable", "param1", "param2"]

shell 形式,command作為/bin/sh -c的參數進行執行,即為 shell 的子進程。

  1. ENTRYPOINT command param1 param2

ENTRYPOINT指令允許您指定容器啟動時的啟動進程。

VOLUME

  1. VOLUME ["/data"]

VOLUME指令指定了一個掛載點,並給該掛載點命名,表明該掛載點的數據卷來自於主機的某個目錄或者共享了其他容器的目錄,該掛載點的內容不會隨鏡像的分發而分發。

USER

  1. USER daemon

USER指令設置啟動鏡像時的用戶或者UID,隨後所有在Dockerfile文件內的RUNCMD以及ENTRYPOINT指令都將該用戶作為執行用戶。

WORKDIR

  1. WORKDIR /path/to/workdir

WORKDIR 指令設置工作目錄,隨後所有在Dockerfile文件內的RUNCMD以及ENTRYPOINT指令都將該目錄作為當前目錄,並執行相應的命令。

最後更新:2016-11-23 16:03:52

  上一篇:go 構建容器鏡像__構建管理_用戶指南_容器服務-阿裏雲
  下一篇:go 常用 Docker 相關軟件下載加速__構建管理_用戶指南_容器服務-阿裏雲