1. 程式人生 > >Dockerfile 常用指令 - 每天5分鐘玩轉 Docker 容器技術(16)

Dockerfile 常用指令 - 每天5分鐘玩轉 Docker 容器技術(16)

依次 官方文檔 構建 bottom str -s 暴露 工作 12px

是時候系統學習 Dockerfile 了。

下面列出了 Dockerfile 中最常用的指令,完整列表和說明可參看官方文檔。

FROM
指定 base 鏡像。

MAINTAINER
設置鏡像的作者,可以是任意字符串。

COPY
將文件從 build context 復制到鏡像。
COPY 支持兩種形式:

  1. COPY src dest

  2. COPY ["src", "dest"]

註意:src 只能指定 build context 中的文件或目錄。

ADD
與 COPY 類似,從 build context 復制文件到鏡像。不同的是,如果 src 是歸檔文件(tar, zip, tgz, xz 等),文件會被自動解壓到 dest。

ENV
設置環境變量,環境變量可被後面的指令使用。例如:

...

ENV MY_VERSION 1.3

RUN apt-get install -y mypackage=$MY_VERSION

...

EXPOSE
指定容器中的進程會監聽某個端口,Docker 可以將該端口暴露出來。我們會在容器網絡部分詳細討論。

VOLUME


將文件或目錄聲明為 volume。我們會在容器存儲部分詳細討論。

WORKDIR
為後面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令設置鏡像中的當前工作目錄。

RUN
在容器中運行指定的命令。

CMD
容器啟動時運行指定的命令。
Dockerfile 中可以有多個 CMD 指令,但只有最後一個生效。CMD 可以被 docker run 之後的參數替換。

ENTRYPOINT
設置容器啟動時運行的命令。
Dockerfile 中可以有多個 ENTRYPOINT 指令,但只有最後一個生效。CMD 或 docker run 之後的參數會被當做參數傳遞給 ENTRYPOINT。

下面我們來看一個較為全面的 Dockerfile:

技術分享

註:Dockerfile 支持以“#”開頭的註釋。

構建鏡像:

技術分享

① 構建前確保 build context 中存在需要的文件。

② 依次執行 Dockerfile 指令,完成構建。

運行容器,驗證鏡像內容:

技術分享

① 進入容器,當前目錄即為 WORKDIR。
如果 WORKDIR 不存在,Docker 會自動為我們創建。

② WORKDIR 中保存了我們希望的文件和目錄:
目錄 bunch:由 ADD 指令從 build context 復制的歸檔文件 bunch.tar.gz,已經自動解壓。
文件 tmpfile1:由 RUN 指令創建。
文件 tmpfile2:由 COPY 指令從 build context 復制。

③ ENV 指令定義的環境變量已經生效。

在上面這些指令中,RUN、CMD、ENTRYPOINT 很重要且容易混淆,下節專門討論。

技術分享

Dockerfile 常用指令 - 每天5分鐘玩轉 Docker 容器技術(16)