Dockerfile 指令
每個指令的用意與 copy-exact 範例。以 Docker 官方 Dockerfile 參考為準(截至 2026-06)。
指令一覽
RUN 的 shell form 與 exec form
RUN 成一條(用 && 與 \)可減少層數,並把 apt 快取在同一層清掉。
三組常混的差異
- CMD vs ENTRYPOINT
- COPY vs ADD
- ARG vs ENV
CMD是「預設指令」,docker run myimg 其他指令會整個覆蓋 CMD。ENTRYPOINT是「固定進入點」,docker run後接的參數會附加在 ENTRYPOINT 之後,不覆蓋它。- 常見組合:
ENTRYPOINT放固定執行檔、CMD放可被覆蓋的預設參數。 - 兩者都用 exec form(JSON 陣列),PID 1 才是應用程式本身,才能正確收到 SIGTERM 做優雅關閉;shell form 會包一層
/bin/sh -c,signal 傳不進去。
其他常用指令範例
EXPOSE 只是宣告,不會真的開埠;USER 不存在的使用者要先 RUN useradd 建立。
接下來
- 配合 Python 程式:把這些指令兜成可用的 Dockerfile。
- Layer cache 與最佳實踐:指令順序與快取。