Docker 徹底改變了容器化的世界,開發人員更容易管理和部署應用程序。Dockerfiles 是構建和理解容器鏡像的關鍵組件,理解 Dockerfiles 中指令的區別是很有必要的。
在在本文中,我們將探討 Dockerfile 中的 ENTRYPOINT 和 CMD 指令的用法,以及它們是如何交互的。
1. ENTRYPOINT 介紹
ENTRYPOINT 指令用於指定容器啓動時默認可執行文件或命令。
基本語法:
ENTRYPOINT ["executable", "param1", "param2"]
或者
ENTRYPOINT command param1 param2
2. CMD 介紹
CMD 指令用於為 ENTRYPOINT 指令 提供默認參數或定義一個默認命令,如果沒有指定 ENTRYPOINT 指令,該命令將被執行。不像 ENTRYPOINT,CMD 沒有定義容器的主要用途,相反,它提供了一個可以輕鬆覆蓋的默認行為。
基本語法:
CMD ["executable", "param1", "param2"]
或者
CMD command param1 param2
3. ENTRYPOINT 和 CMD 區別
Purpose
ENTRYPOINT 用於定義容器的主要目的,而 CMD 提供了可以覆蓋的默認行為。
Overriding
當運行一個容器時,可以通過提供額外的命令行參數輕鬆覆蓋 CMD 指令,而 ENTRYPOINT 指令不能被重寫,除非使用 -entrypoint 選項顯式指定。
Interaction
如果 Dockerfile 同時指定 ENTRYPOINT 和 CMD 指令,CMD 為 ENTRYPOINT 指令參數提供默認值。
4. 結合 ENTRYPOINT 和 CMD
通過在 Dockerfile 中同時使用 ENTRYPOINT 和 CMD,您可以靈活的創建容器鏡像,同時具有明確的定義和可定製的行為。ENTRYPOINT 指令指定要執行的默認命令, CMD 指令提供該命令的默認參數。
FROM ubuntu:latest
ENTRYPOINT ["/bin/ping"]
CMD ["localhost"]
在本例中,ENTRYPOINT 指令指定容器應該執行 ping 命令,CMD 指令提供默認參數“ localhost ”。如果運行容器時沒有附加參數,它將執行 ping localhost 命令。
我的開源項目
- course-tencent-cloud(酷瓜雲課堂 - gitee倉庫)
- course-tencent-cloud(酷瓜雲課堂 - github倉庫)