Section 6 The difference between docker CMD and ENTRYPOINT

The difference between CMD and ENTRYPOINT

# CMD测试
# 1.编写dockerfile-cmd使用CMD命令,在容器运行后自动运行ls -a命令
[root@amumu zzl-dockerfile]# cat dockerfile-cmd 
FROM centos
MAINTAINER zhuzhonglang<[email protected]>
CMD ["ls","-a"]
# 2.构建镜像
[root@amumu zzl-dockerfile]# docker build -f dockerfile-cmd -t dockercmd-test:1.0 . 
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM centos
 ---> 300e315adb2f
Step 2/3 : MAINTAINER zhuzhonglang<[email protected]>
 ---> Using cache
 ---> 313fbe570c8d
Step 3/3 : CMD ["ls","-a"]
 ---> Running in 6f376bf9727a
Removing intermediate container 6f376bf9727a
 ---> 50e092624b77
Successfully built 50e092624b77
Successfully tagged dockercmd-test:1.0
[root@amumu zzl-dockerfile]# 
# 3.运行刚刚创建的镜像,运行镜像后,自动执行了ls -a命令
[root@amumu zzl-dockerfile]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
dockercmd-test   1.0       50e092624b77   18 seconds ago   209MB
mycentos         1.0       ff0a2b5b0669   5 hours ago      291MB
mysql            5.7       87eca374c0ed   3 weeks ago      447MB
nginx            latest    62d49f9bab67   4 weeks ago      133MB
centos           latest    300e315adb2f   5 months ago     209MB

[root@amumu zzl-dockerfile]# docker run 50e092624b77  
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 4.运行镜像,并在镜像后面加上-l ,这时并没有按照理想中的情况自动执行ls -al命令,而是报错了
[root@amumu zzl-dockerfile]# docker run 50e092624b77 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
# 5.运行镜像,并在镜像后面加上ls -al命令,这时容器启动并正常执行了ls -al,说明ls -al命令代替了容器中原来的ls -a命令
[root@amumu zzl-dockerfile]# docker run 50e092624b77 ls -al
total 0
drwxr-xr-x.   1 root root   6 May 12 14:44 .
drwxr-xr-x.   1 root root   6 May 12 14:44 ..
-rwxr-xr-x.   1 root root   0 May 12 14:44 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 May 12 14:44 dev
drwxr-xr-x.   1 root root  66 May 12 14:44 etc
drwxr-xr-x.   2 root root   6 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   6 Dec  4 17:37 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 166 root root   0 May 12 14:44 proc
dr-xr-x---.   2 root root 162 Dec  4 17:37 root
drwxr-xr-x.  11 root root 163 Dec  4 17:37 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 May  9 08:45 sys
drwxrwxrwt.   7 root root 145 Dec  4 17:37 tmp
drwxr-xr-x.  12 root root 144 Dec  4 17:37 usr
drwxr-xr-x.  20 root root 262 Dec  4 17:37 var
[root@amumu zzl-dockerfile]#


# ENTRYPOINT测试
# 1.编写dockerfile-entrypoint 使用ENTRYPOINT命令,在容器运行后自动运行ls -a命令
[root@amumu zzl-dockerfile]# cat dockerfile-entrypoint 
FROM centos
MAINTAINER zhuzhonglang<[email protected]>
ENTRYPOINT ["ls","-a"]
# 2.构建镜像
[root@amumu zzl-dockerfile]# docker build -f dockerfile-entrypoint -t dockerentrypoint-test:1.0 .
Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM centos
 ---> 300e315adb2f
Step 2/3 : MAINTAINER zhuzhonglang<[email protected]>
 ---> Using cache
 ---> 313fbe570c8d
Step 3/3 : ENTRYPOINT ["ls","-a"]
 ---> Running in 5048d75aff02
Removing intermediate container 5048d75aff02
 ---> 022c0f02e90a
Successfully built 022c0f02e90a
Successfully tagged dockerentrypoint-test:1.0
# 3.运行刚刚创建的镜像,运行镜像后,自动执行了ls -a命令
[root@amumu zzl-dockerfile]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
dockerentrypoint-test   1.0       022c0f02e90a   7 seconds ago    209MB
dockercmd-test          1.0       50e092624b77   14 minutes ago   209MB
mycentos                1.0       ff0a2b5b0669   5 hours ago      291MB
mysql                   5.7       87eca374c0ed   3 weeks ago      447MB
nginx                   latest    62d49f9bab67   4 weeks ago      133MB
centos                  latest    300e315adb2f   5 months ago     209MB
[root@amumu zzl-dockerfile]# docker run 022c0f02e90a
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
# 4.运行镜像,并在镜像后面加上-l ,这时会按照理想中的情况自动执行ls -al命令
[root@amumu zzl-dockerfile]# docker run 022c0f02e90a -l
total 0
drwxr-xr-x.   1 root root   6 May 12 14:54 .
drwxr-xr-x.   1 root root   6 May 12 14:54 ..
-rwxr-xr-x.   1 root root   0 May 12 14:54 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 May 12 14:54 dev
drwxr-xr-x.   1 root root  66 May 12 14:54 etc
drwxr-xr-x.   2 root root   6 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   6 Dec  4 17:37 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 168 root root   0 May 12 14:54 proc
dr-xr-x---.   2 root root 162 Dec  4 17:37 root
drwxr-xr-x.  11 root root 163 Dec  4 17:37 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 May  9 08:45 sys
drwxrwxrwt.   7 root root 145 Dec  4 17:37 tmp
drwxr-xr-x.  12 root root 144 Dec  4 17:37 usr
drwxr-xr-x.  20 root root 262 Dec  4 17:37 va

#总结:
#CMD:在docker run时添加命令参数,并不会把参数合并到原来CMD对应的命令中,而是把参数作为命令运行了
#ENTRYPOINT:在docker run时添加命令参数,这时会把参数合并到ENTRYPOINT对应的命令中

# CMD和ENTRYPOINT同时存在的时候,CMD不会被执行
[root@amumu zzl-dockerfile]# vi cmd-entrypoint 
FROM centos
MAINTAINER zhuzhonglang<[email protected]>
CMD ls -a
ENTRYPOINT echo "hello world"
CMD echo "zhuzhonglnag"
[root@amumu zzl-dockerfile]# docker run 1fb81421a7a6
hello world
[root@amumu zzl-dockerfile]# docker 

Guess you like

Origin blog.csdn.net/qq_20663229/article/details/116840992