iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

上一篇講完了簡單的 Dockerfile 用法,接著就要來講一下比較深入的用法了。

首先先來看一下常用的 Dockerfile 指令

Keyword Discription
FROM <image_name>[:<image_tag>] 基礎映像。
COPY <src> <dest> 複製。規則需符合 Go 的 filepath.Match。
ADD COPY,但複製 tar 壓縮文件時會自動解壓。同需求下推薦用 COPY
RUN <command> orRUN ["command", "arg1", "arg2", ...] 執行。在 Dockerfile build 時執行。
*CMD 類似 RUN 。但在 docker run 時執行,且有多行時只會執行最後一行。如果啟動時有指定其他指令會被忽略。
*ENTRYPOINT 類似 CMD 。但一定會被執行。
WORKDIR <dir_name> 設定工作目錄。建立的工作目錄會存在於每一層。如果不存在會自動建立。
EXPOSE <port_number> 開放 PORT。僅宣告,要連進該服務需使用 publish。
ENV <key>=<value> 環境變數。
ARG 類似 ENV 。但僅在 dockerfile 作用。

* 如果有多行同時存在時,只會執行最後一行。

  1. Dockerfile 撰寫規則中規定必須包含至少 1 個 CMDENTRYPOINT 在內(但沒有好像也不會怎樣)。
  2. Dockerfile 的指令每執行一次都會在 docker 上新建一層 (Layer)。所以過多無意義的層,會造成 Image 膨脹過大。
  3. 最多到 127 層 (Layer)

接著我們一一介紹各個指令的用途吧。

第一個 FROM 昨天介紹過了,就是指定接下來的開發環境。

第二個 COPY 跟第三個 ADD 作用都是將檔案或資料夾複製到 Image 內,不過如果複製的檔案是 tar 的壓縮文件時, ADD 會自動解壓縮後再複製進去。官方文件中推薦如果沒有特殊需求建議使用 COPY

第四個 RUN 昨天也已經介紹過了,作用是在 Image 建立的過程中處裡某些東西,例如安裝套件或是其他的操作。

第五個 CMD 跟第六個 ENTRYPOINT 都是在啟動 Container 時才會執行的指令,

第七個 WORKDIR 昨天也介紹過了,就是指定接下來的工作目錄。

第八個 EXPOSE 昨天也介紹過了,就是宣告要開放的 PORT 。

第九個 ENV 跟第十個 ARG 都是用於設定環境變數,不過有點差別,我們先來看看個別作用個區域。

上面這張圖很清楚的標示了 ARGENV 作用的區域, ARG 主要是在 Image 建立過程中使用的環境變數,大概就是安裝套件時用來指定版本使用; ENV 則是執行時所需使用的環境變數。

那麼就先到這邊, Dockerfile 的基本使用大概就是這樣, Dockerfile 超過一半以上都是在使用這些指令,只要使用熟悉,就可以順利地建構出各種 Image 了。

大家掰~掰~


上一篇
Day 05 DockerFile - 1
下一篇
Day 07 Docker Volume
系列文
30天漫遊雲端之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言