【Docker學習筆記4Day】- 什麼是Dockerfile?

Dockerfile

Docker可以通過閱讀Docker的指令來自動構建映像 Dockerfile。A Dockerfile是一個文本文檔,其中包含用戶可以在命令行上調用以組裝圖像的所有命令。使用docker build 用戶可以創建自動構建,該構建連續執行多個命令行指令。

Dockerfile其內部包含了一條條的指令,每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

請注意,每條指令都是獨立運行的,並會導致創建新映像-因此RUN cd /tmp對下一條指令不會有任何影響。

Docker Dockerfile按順序運行指令。一個Dockerfile 必須用FROM指令開始。這可能在解析器指令,註釋和全局範圍的 ARG之後。該FROM指令指定要從中構建父圖像。FROM 只能在一個或多個ARG指令之前,這些指令聲明在中的FROM行中使用的參數Dockerfile。

Dockerfile指令

以下變量中的指令列表支持環境變量Dockerfile:

  • FROM 指定基礎鏡像
  • RUN 執行命令
  • ADD 高級複製文件
  • COPY 複製文本
  • CMD 容器啓動命令
  • ENTRYPOINT 入口點
  • ENV 設置環境變量
  • ARG 構建參數
  • EXPOSE 暴露端口
  • USER 指定當前用戶
  • VOLUME 定義匿名卷
  • WORKDIR 指定工作目錄
  • HEALTHCHECK 健康檢查

上下文路徑

上下文路徑,是指 docker 在構建鏡像,有時候想要使用到本機的文件(比如複製),docker build 命令得知這個路徑後,會將路徑下的所有內容打包。
上下文路徑下不要放無用的文件,因爲會一起打包發送給 docker 引擎,如果文件過多會造成過程緩慢。

FROM 指定基礎鏡像

第一條指令。scratch是虛擬的鏡像,表示一個空白的鏡像。
FROM ubuntu:16.04 # :指定版本

RUN 執行命令

Dockerfile 的指令每執行一次都會在 docker 上新建一層。所以過多無意義的層,會造成鏡像膨脹過大。
以 && 符號連接命令,這樣執行後,只會創建 1 層鏡像。

ADD 高級複製文件

ADD 指令和 COPY 的使用格式一致(同樣需求下,官方推薦使用 COPY)。功能也類似,不同之處如下:

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

COPY 複製文本

從上下文目錄中複製文件或者目錄到容器裏指定路徑。容器內的指定路徑,該路徑不用事先建好,路徑不存在的話,會自動創建。

CMD 容器啓動命令

類似於 RUN 指令,用於運行程序,但二者運行的時間點不同:
爲啓動的容器指定默認要運行的程序,程序運行結束,容器也就結束。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。

  • CMD 在docker run 時運行。
  • RUN 是在 docker build。
    注意:如果 Dockerfile 中如果存在多個 CMD 指令,僅最後一個生效。

ENTRYPOINT 入口點

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

ENV 設置環境變量

設置環境變量,定義了環境變量,那麼在後續的指令中,就可以使用這個環境變量。

構建參數,與 ENV 作用一至。不過作用域不一樣。ARG 設置的環境變量僅對 Dockerfile 內有效,也就是說只有 docker build 的過程中有效,構建好的鏡像內不存在此環境變量。

ARG 構建參數

構建命令 docker build 中可以用 --build-arg <參數名>=<值> 來覆蓋。

EXPOSE 暴露端口

僅僅只是聲明端口。
作用:
幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射。
在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。

USER 指定當前用戶

用於指定執行後續命令的用戶和用戶組,這邊只是切換後續命令執行的用戶(用戶和用戶組必須提前已經存在)。

VOLUME 定義匿名卷

定義匿名數據卷。在啓動容器時忘記掛載數據卷,會自動掛載到匿名卷。
作用:
避免重要的數據,因容器重啓而丟失,這是非常致命的。
避免容器不斷變大。
在啓動容器 docker run 的時候,我們可以通過 -v 參數修改掛載點。

WORKDIR 指定工作目錄

指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。
docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄纔會一直存在。

HEALTHCHECK 健康檢查

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

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