Dockerfile指令
CMD 命令提供了容器默認執行的命令,即容器啟動時默認允許的命令,可以理解為 Windows 係統下的開機啟動項,每次啟動容器時,CMD 指定的命令都會運行一次。CMD 命令隻生效一次,多次使用時,隻有最後一個生效。
CMD 命令使用
CMD 命令共有三種格式,分別是:
CMD ["可執行文件","參數1","參數2"]
這個格式用於 exec 執行可執行文件,並提供一個參數,建議使用此方法設置可執行文件。CMD ["參數1","參數2"]
這個格式用於為 ENTRYPOINT 指定參數CMD 命令 參數1 參數2
這個格式用於以 /bin/sh -c 來執行命令,可能會產生無法控製的問題,不建議使用。
常用 CMD 命令
- Nginx 鏡像 CMD 命令 :
CMD ["nginx", "-g", "daemon off;"]
- Apache 鏡像 CMD 命令 :
CMD ["httpd-foreground"]
- Django 鏡像 CMD 命令 :
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
- MySQL 鏡像 CMD 命令 :
CMD ["mysqld"]
- NodeJS 鏡像 CMD 命令 :
CMD [ "node" ]
- Rails 鏡像 CMD 命令 :
CMD ["rails", "server", "-b", "0.0.0.0"]
- Redis 鏡像 CMD 命令 :
CMD [ "redis-server" ]
- 當不確定鏡像類型時,你可以選擇使用如下命令:
CMD ["/usr/sbin/sshd","-D"]
要求:鏡像中已安裝 sshd 服務。
CMD 命令常見問題
- CMD 命令和 ENTRYPOINT 的區別?
- CMD 命令和 RUN 命令的區別?
CMD 命令可以通過啟動時傳入的參數被覆蓋,而 ENTRYPOINT 無法被覆蓋。
CMD 命令是在容器啟動時創建的,而 RUN 命令是在容器編譯時執行的。
CMD 命令最佳實踐
docker run 命令中的參數都會傳遞給 ENTRYPOINT 指令,而不會被覆蓋,當與 CMD 一同使用時,效果更好。 通過 ENTRYPOINT 命令指定容器默認允許的文件如 ENTRYPOINT ["/vhs/kangle/bin/kangle"],通過 CMD 來設置默認的參數 CMD ["-S"]。這樣,當執行 docker run -d imagesname 時,就會在啟動時自動執行 /vhs/kangle/bin/kangle -S。當我們需要使用其他的參數時,隻需要執行 docker run -d imagesname --H,在啟動命令後加入新的參數--H,就會自動執行 --H 參數,這時執行的命令就是 /vhs/kangle/bin/kangle --H。這種情況下,處理容器的交互問題就比較方便。
最後更新:2017-01-03 10:48:52