Docker——Dockerfile相關知識點

定義:Dockerfile用來構建鏡像的文本文檔,文本文檔包含了構建鏡像所需的指令和說明。

構建好的鏡像內會有一個 /usr/share/nginx/html/index.html的文件。

在一個空目錄下,新建一個名爲Dockerfile的文件,並添加下面內容:

FROM nginx
RUN echo '構建nginx鏡像' 〉 /usr/share/nginx/html/index.html

FROM:定製的鏡像都是基於 FROM 的鏡像,這裏的 nginx 就是定製需要的基礎鏡像。後續的操作都是基於 nginx。
RUN:用於執行後續命令,有以下2種格式:

shell格式:RUN <命令行命令>
# <命令行命令> 等同於,在終端操作的 shell 命令。

exec格式:RUN["可執行文件","參數1","參數2"]
# RUN ["./test.php", "dev", "offline"] 等價於 RUN ./test.php dev offline

構建鏡像:docker build -t nginx:test .
          “.”表示上下文路徑,是指docker在構建鏡像,有時候需要使用本機的文件,docker build命令得知
          這個路徑之後,會將路徑下的所有內容打包。

解析:docker的運行模式爲C/S,本機爲C,docker引擎是S。實際的構建過程在docker引擎下完成,需要
          把我們本機的指定目錄下的文件打包提供給docker引擎使用。如果未說明最後一個參數,
          默認的上下文路徑就是dockerfile所在的目錄。

指令詳解:

COPY [--chown=<user>:<group>] <源路徑1> ... <目標路徑>

COPY [--chown=<user>:<group>] ["源路徑1" ... "目標路徑"]

[--chown=<user>:<group>]:可選參數,用戶改變複製到容器內文件的擁有者和屬組。

<源路徑>:源文件或者源目錄,這裏可以是通配符表達式,其通配符規則要滿足 Go 的 filepath.Match 規則
<目標路徑>:容器內的指定路徑,該路徑不用事先建好,路徑不存在的話,會自動創建。

ADD:與COPY使用的格式一致,功能也類似,不同之處在於:
ADD 的優點:在執行 <源文件> 爲 tar 壓縮文件的話,壓縮格式爲 gzip, bzip2 以及 xz 的情況下,
            會自動複製並解壓到 <目標路徑>。
ADD 的缺點:在不解壓的前提下,無法複製 tar 壓縮文件。會令鏡像構建緩存失效,
            從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。

CMD:類似於RUN,CMD 在docker run 時運行。RUN 在 docker build時運行。
作用:爲啓動的程序指定默認要運行的程序,程序運行結束,容器也結束。
        CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。
        如果Dockerfile中存在多個CMD指令,僅最後一個生效。

ENTRYPOINT:類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,
                          而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序。
                          但是, 如果運行 docker run 時使用了 --entrypoint 選項,
                          此選項的參數可當作要運行的程序覆蓋 ENTRYPOINT 指令指定的程序。
               優點:在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數。
                          如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最後一個生效。

ENV:設置環境變量
ARG:作用與ENV一樣,不過作用域不一樣,ARG設置的環境變量僅在Dockerfile內有效,
            即只在docker build的過程中有效,在構建好的鏡像內不存在此環境變量。

VOLUME:定義匿名數據卷。在啓動容器時忘記掛載數據卷,會自動掛載到匿名卷。
        作用:(1)避免重要數據因重起而丟失。(2)避免容器不斷變大。

EXPOSE:聲明端口。
  作用:(1)幫助鏡像使用者理解這個鏡像服務的端口,以方便配置映射。
          (2)在運行時使用隨機端口(docker run -P),會自動隨機映射EXPOSE的端口。

WORKDIR:指定工作目錄。必須提前建好,會在構建鏡像的每一層中都存在。

USER:用於指定執行後續命令的用戶和用戶組,必須提前存在。

HEALTHCHECK:用於指定某個程序或者指令來監控docker容器的運行狀態。

ONBUILD:用於延遲構建命令的執行。在Dockerfile裏用ONDBUILD指定的命令,在本次構建鏡像的過程中不會執行。

參考:https://www.runoob.com/docker/docker-dockerfile.html

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