docker 覆盖 entrypoint_最佳实践,Dockerfile中ENTRYPOINT与CMD指令的区别与建议
通過本文你會獲得什么
熟悉Dockerfile中ENTRYPOINT和CMD指令之間的區別,以及在實際項目中的使用建議。
1 - 開始前準備
首先你要有個docker環境,以下實驗基于:docker 18.09,以及alpine:3.8鏡像。
下載基礎鏡像
docker pull alpine:3.82 - ENTRYPOINT與CMD指令
* CMD: 指定容器啟動時所運行的可執行程序與參數。
* ENTRYPOINT: 指定容器啟動時所運行的可執行程序與參數。
你沒看錯,他們從根本上來說實際產生的作用一樣,這里有以下幾個規則:
1. 最多只能設置一個ENTRYPOINT與一個CMD,如果設置多個,均最后一個生效。
2. 當容器設計為一個服務端時(微服務),使用ENTRYPOINT指令指定可執行文件,使用CMD指令指定默認參數。
3. 當容器設計為一個客戶端時(工具等),使用CMD指令指定可執行文件與其參數。
4. CMD指令中的參數可允許被交互時覆蓋,也就是可以在docker run中覆蓋的參數。
5. 支持兩種編寫風格(EXEC與SHELL),均建議使用EXEC風格編寫
6. 設置在ENTRYPOINT指令中的可執行程序與參數,當容器啟動時,優先級高于CMD。
7. 如果父鏡像的Dockerfile定義了CMD,設置ENTRYPOINT會清空父鏡像CMD指令。
3 - 兩種編寫風格
存在兩種風格,分別為EXEC形式與SHELL形式。
* EXEC風格:為一個數組,需使用雙引號隔開
CMD ["executable總結
以上是生活随笔為你收集整理的docker 覆盖 entrypoint_最佳实践,Dockerfile中ENTRYPOINT与CMD指令的区别与建议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (三)ElasticSearch的基本概
- 下一篇: spring security 认证与权