Dockerfile的CMD與ENTRYPOINT的區(qū)別
CMD和ENTRYPOINT
我們先來試一下構(gòu)建以下這個(gè)Dockerfile,并運(yùn)行
FROM centos CMD ["ls","-a"]
構(gòu)建
[root@zhima lizhi]# docker build -t mycentos . Sending build context to Docker daemon 17.92kB Step 1/2 : FROM centos ---> 5d0da3dc9764 Step 2/2 : CMD ["ls","-a"] ---> Running in a1e70a05d8dd Removing intermediate container a1e70a05d8dd ---> 00433fd4c299 Successfully built 00433fd4c299 Successfully tagged mycentos:latest
運(yùn)行
[root@zhima lizhi]# docker run -it --name "centos1" mycentos . .dockerenv dev home lib64 media opt root sbin sys usr .. bin etc lib lost+found mnt proc run srv tmp var
可以發(fā)現(xiàn),進(jìn)入容器之后,就執(zhí)行了ls -a
命令
我們嘗試一下在啟動(dòng)的時(shí)候加入一些參數(shù)
[root@zhima lizhi]# docker run -it --name "centos2" mycentos -l docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
我們發(fā)現(xiàn)容器并沒有執(zhí)行ls -al
,而是直接報(bào)錯(cuò)了
其實(shí)這就是CMD的特性,當(dāng)我在啟動(dòng)容器的時(shí)候添加了一個(gè)CMD后
鏡像中定義的CMD就被覆蓋掉了
單獨(dú)的-l
當(dāng)然會(huì)報(bào)錯(cuò)了
我們來看一下使用ENTRYPOINT會(huì)怎么樣
修改Dockerfile
FROM centos ENTRYPOINT ["ls","-a"]
重新構(gòu)建
[root@zhima lizhi]# docker build -t mycentos . Sending build context to Docker daemon 17.92kB Step 1/2 : FROM centos ---> 5d0da3dc9764 Step 2/2 : ENTRYPOINT ["ls","-a"] ---> Running in 22ef40dea625 Removing intermediate container 22ef40dea625 ---> 73a3d51b4d84 Successfully built 73a3d51b4d84 Successfully tagged mycentos:latest
運(yùn)行容器
[root@zhima lizhi]# docker run -it --name "centos1" mycentos -l total 56 drwxr-xr-x 1 root root 4096 Jul 14 08:52 . drwxr-xr-x 1 root root 4096 Jul 14 08:52 .. -rwxr-xr-x 1 root root 0 Jul 14 08:52 .dockerenv lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin drwxr-xr-x 5 root root 360 Jul 14 08:52 dev drwxr-xr-x 1 root root 4096 Jul 14 08:52 etc drwxr-xr-x 2 root root 4096 Nov 3 2020 home lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64 drwx------ 2 root root 4096 Sep 15 2021 lost+found drwxr-xr-x 2 root root 4096 Nov 3 2020 media drwxr-xr-x 2 root root 4096 Nov 3 2020 mnt drwxr-xr-x 2 root root 4096 Nov 3 2020 opt dr-xr-xr-x 191 root root 0 Jul 14 08:52 proc dr-xr-x--- 2 root root 4096 Sep 15 2021 root drwxr-xr-x 11 root root 4096 Sep 15 2021 run lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Nov 3 2020 srv dr-xr-xr-x 13 root root 0 Jan 29 10:27 sys drwxrwxrwt 7 root root 4096 Sep 15 2021 tmp drwxr-xr-x 12 root root 4096 Sep 15 2021 usr drwxr-xr-x 20 root root 4096 Sep 15 2021 var
可以發(fā)現(xiàn),容器執(zhí)行的是ls -al
,-l
指令被追加給了ENTRYPOINT定義的語句
到此這篇關(guān)于Dockerfile的CMD與ENTRYPOINT的區(qū)別的文章就介紹到這了,更多相關(guān)Dockerfile CMD與ENTRYPOINT內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟
這篇文章主要介紹了Docker容器運(yùn)行ASP.NET Core的實(shí)現(xiàn)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04Docker網(wǎng)絡(luò)之自定義網(wǎng)絡(luò)方式
文章介紹了Docker的網(wǎng)絡(luò)模式,包括bridge、none、container、host和用戶自定義網(wǎng)絡(luò),并詳細(xì)說明了docker0網(wǎng)絡(luò)的特點(diǎn)和自定義網(wǎng)絡(luò)的創(chuàng)建2025-01-01docker run啟動(dòng)的容器掛掉了數(shù)據(jù)怎么辦
這篇文章主要介紹了docker run啟動(dòng)的容器掛掉了,數(shù)據(jù)怎么辦,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09利用?trap?在?docker?容器優(yōu)雅關(guān)閉前執(zhí)行環(huán)境清理的方案
這篇文章主要介紹了利用?trap?在?docker?容器優(yōu)雅關(guān)閉前執(zhí)行環(huán)境清理的問題,需要在容器的啟動(dòng)腳本中,加入 trap 指令,來完成容器在退出前需要做的所有事情,本文通過腳本示例給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-12-12淺析SpringBoot打包上傳到docker并實(shí)現(xiàn)多實(shí)例部署(IDEA版)
這篇文章主要介紹了SpringBoot打包上傳到docker并實(shí)現(xiàn)多實(shí)例部署(IDEA版),本文通過圖文并茂實(shí)例詳解的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04docke自定義網(wǎng)絡(luò)之容器互聯(lián)
大家好,本篇文章主要講的是docke自定義網(wǎng)絡(luò)之容器互聯(lián),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12