iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Cloud Native

docker系列 第 13

Day13 Dockerfile 3

  • 分享至 

  • xImage
  •  

在上一篇文章中,我們已經學習了基本的Dockerfile用法。現在,讓我們更深入地瞭解一些常用的Dockerfile指令,以及它們的用途。

關鍵字 描述
FROM <image_name>[:<image_tag>] 基礎映像。這指定了我們要使用的基礎映像檔,通常放在Dockerfile的頂部,用於設定開發環境。
COPY <src> <dest> 複製文件或資料夾到容器內。規則需符合Go的filepath.Match。
ADD COPY相似,但在複製tar壓縮文件時會自動解壓縮。推薦使用COPY除非有特殊需求。
RUN <command> or RUN [“command”, “arg1”, “arg2”, …] 執行命令,用於在Dockerfile構建過程中執行操作。
CMD 類似於RUN,但在容器運行時執行,如果有多行CMD,只執行最後一行。
ENTRYPOINT 類似於CMD,但始終被執行。
WORKDIR <dir_name> 設定工作目錄,建立的工作目錄會存在於每一層。如果不存在,則會自動建立。
EXPOSE <port_number> 宣告開放的PORT,但需要使用端口映射來連接到主機。
ENV <key>=<value> 設定環境變數,用於執行時所需的環境變數。
ARG 類似於ENV,但僅在Dockerfile作用,用於Image建構過程中的環境變數。

需要注意的是,Dockerfile的指令每執行一次都會在Docker上創建一個新的層(Layer),過多的無意義層會導致Image膨脹過大,最多到127層。
此外,Dockerfile撰寫規則要求必須包含至少1個CMDENTRYPOINT(但如果沒有好像也不會有什麼問題)。
現在,我們來更詳細地介紹這些指令的用途。

FROM

第一個FROM已經在上一篇文章中介紹過了,它用於指定接下來的開發環境的基礎映像。

COPY 和 ADD

COPYADD都用於將文件或文件夾複製到容器內。不過,如果複製的文件是tar壓縮文件時,ADD會自動解壓縮後再複製到容器內。根據官方文件,除非有特殊需求,推薦使用COPY

RUN

RUN指令用於在Image建構的過程中執行特定操作,例如安裝套件或進行其他操作。

CMD 和 ENTRYPOINT

CMDENTRYPOINT都是在啟動容器時執行的指令,不同之處在於ENTRYPOINT始終會被執行,而CMD如果有多行,只會執行最後一行。當容器運行時,如果指定了其他指令,它們將覆蓋CMDENTRYPOINT

WORKDIR

WORKDIR指令用於設定接下來的工作目錄。新建的工作目錄會存在於每一層,如果目錄不存在,它將自動創建。

EXPOSE

EXPOSE指令宣告容器內部開放的端口,但需要使用端口映射來連接到主機。

ENV 和 ARG

ENVARG用於設定環境變數。不同之處在於ARG主要在Image建構過程中使用,用於指定版本等,而ENV是在執行時所需的環境變數。
https://ithelp.ithome.com.tw/upload/images/20230928/20150239iHrpter7Mm.png


上一篇
Day 12 DockerFile 2
下一篇
Day14 Docker Volume
系列文
docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言