CMD和ENTRYPOINT的作用
CMD和ENTRYPOINT這兩個命令,我接觸到的是用在了Dockerfile中用于構(gòu)建容器。
CMD:The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是為正在執(zhí)行的容器提供默認值。也就是指定這個容器啟動的時候要運行的命令。
ENTRYPOINT:也是指定這個容器啟動的時候要運行的命令。
?
CMD語法
The CMD instruction has three forms:
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
Dockerfile中只有一條CMD指定,如果列出多個,只有最后一個CMD才會生效。
CMD的主要目的是為正在執(zhí)行的容器提供默認值。這些默認值可以包括可執(zhí)行問卷,也可以省略可執(zhí)行問卷,在這種情況下必須指定給一條ENTRYPOINT指令。
ENTRYPOINT語法
ENTRYPOINT 有兩種形式:
exec形式,這是首選形式:
ENTRYPOINT ["executable", "param1", "param2"]
外殼形式:
ENTRYPOINT command param1 param2
與CMD類似再Dockerfile中只有一條ENTRYPOINT指定,如果列出多個,只有最后一個ENTRYPOINT生效。
CMD與ENTRYPOINT的區(qū)別
docker run后面的參數(shù)會將CMD指定的參數(shù)進行覆蓋。
ENTRYPOINT與CMD的區(qū)別是不可以被docker run 后的參數(shù)覆蓋,會把docker run后面的參數(shù)傳遞給ENTRYPOINT指定的參數(shù)。
案例
使用使用Dockerfile構(gòu)建centos鏡像,再Dockerfile中使用CMD和ENTRYPOINT。當docker run +參數(shù)的時候進行CMD 和ENTRYPOINT的測試,CMD指定的參數(shù)是否會被覆蓋,以及ENTRYPOINT指定的參數(shù)是否會最佳docker run后面的參數(shù)。
?
測試CMD
1.創(chuàng)建一個名為dockerfile-centos-test的文件,再編寫dockerfile文件。
# 編寫dockerfile文件
$ vim dockerfile-centos-test
FROM centos
CMD ["ls","-a"] #再容器運行的時候列出所有目錄
# 構(gòu)建鏡像
$ docker build -f dockerfile-centos-test -t cmd-test:0.1 .
# 運行鏡像
$ docker run cmd-test:0.1
列出了所有目錄
2.這個時候我們再追加一個命令-l 變成ls-al
出現(xiàn)錯誤,再CMD的情況加-l 替換了CMD[“l(fā)s”,“-l”].由于-l不是命令所以報錯。
3.我們再輸入docker run cmd-test:0.1 ls
這個時候就執(zhí)行成功了。驗證了 docker run時輸入的命令會替換掉CMD的命令
測試ENTRYPOINT
和之前測試CMD一樣,
#創(chuàng)建一個文件docker-test-entrypoint
#編寫dockerfile文件
$ vim docker-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
#構(gòu)建鏡像
$ docker build -f docker-test-entrypoint -t entrypoint-test:0.1 .
#運行鏡像
$ docker run entrypoint-test:0.1```
這個時候追加一個命令-l 成為ls-al
```powershell
# 想追加一個命令 -l 成為ls -al
$ docker run cmd-test:0.1 -l
總結(jié)一下:
CMD的情況下 -l 替換了CMD的ls -a。文章來源:http://www.zghlxwxcb.cn/news/detail-784969.html
而ENTRYPOINT的情況下-l 追加到了ls -a 的后面 變成了ls -al。文章來源地址http://www.zghlxwxcb.cn/news/detail-784969.html
到了這里,關(guān)于Dockerfile: CMD與ENTRYPOINT區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!