天天看點

Dockerfile詳解(二)

Dockerfile檔案詳解

Dockerfile是一個包含用于組合映像的指令的文本文檔。可以使用在指令行中調用任何指令。 Docker通過讀取<code>Dockerfile</code>中的指令自動生成映像。

<code>docker build</code>指令用于從Dockerfile建構映像。可以在<code>docker build</code>指令中使用<code>-f</code>标志指向檔案系統中任何位置的Dockerfile。

例:

Dockerfile 一般分為四部分:基礎鏡像資訊、維護者資訊、鏡像操作指令和容器啟動時執行指令,’#’ 為 Dockerfile 中的注釋。

Docker以從上到下的順序運作Dockerfile的指令。為了指定基本映像,第一條指令必須是FROM。一個聲明以<code>#</code>字元開頭則被視為注釋。可以在Docker檔案中使用<code>RUN</code>,<code>CMD</code>,<code>FROM</code>,<code>EXPOSE</code>,<code>ENV</code>等指令。

在這裡列出了一些常用的指令。

FROM:指定基礎鏡像,必須為第一個指令

Dockerfile詳解(二)
Dockerfile詳解(二)

MAINTAINER: 維護者資訊

RUN:建構鏡像時執行的指令

Dockerfile詳解(二)
Dockerfile詳解(二)

ADD:将本地檔案添加到容器中,tar類型檔案會自動解壓,可以通路網絡資源,類似wget

Dockerfile詳解(二)
Dockerfile詳解(二)

COPY:功能類似ADD,但是是不會自動解壓檔案,也不能通路網絡資源

CMD:建構容器後調用,也就是在容器啟動時才進行調用。

Dockerfile詳解(二)
Dockerfile詳解(二)

ENTRYPOINT:配置容器,使其可執行化。配合CMD可省去"application",隻使用參數。

Dockerfile詳解(二)
Dockerfile詳解(二)

LABEL:用于為鏡像添加中繼資料

ENV:設定環境變量

Dockerfile詳解(二)
Dockerfile詳解(二)

EXPOSE:指定于外界互動的端口

Dockerfile詳解(二)
Dockerfile詳解(二)

VOLUME:用于指定持久化目錄

Dockerfile詳解(二)
Dockerfile詳解(二)

WORKDIR:工作目錄,類似于cd指令

Dockerfile詳解(二)
Dockerfile詳解(二)

USER:指定運作容器時的使用者名或 UID,後續的 RUN 也會使用指定使用者。使用USER指定使用者時,可以使用使用者名、UID或GID,或是兩者的組合。當服務不需要管理者權限時,可以通過該指令指定運作使用者。并且可以在之前建立所需要的使用者

Dockerfile詳解(二)

 格式:

  USER user

  USER user:group

  USER uid

  USER uid:gid

  USER user:gid

  USER uid:group

 示例:

  USER www

 注:

  使用USER指定使用者後,Dockerfile中其後的指令RUN、CMD、ENTRYPOINT都将使用該使用者。鏡像建構完成後,通過<code>docker run</code>運作容器時,可以通過-u參數來覆寫所指定的使用者。

Dockerfile詳解(二)

ARG:用于指定傳遞給建構運作時的變量

ONBUILD:用于設定鏡像觸發器

Dockerfile詳解(二)
Dockerfile詳解(二)

以下是一個小例子:

Dockerfile詳解(二)
Dockerfile詳解(二)

最後用一張圖解釋常用指令的意義^-^

Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)
Dockerfile詳解(二)

繼續閱讀