CMD 和 ENTRYPOINT的区别
CMD                          #指定这个容器启动时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT            #指定这个容器启动时候要运行的命令,可以追加命令
 
测试cmd
1.编写dockerfile文件
[root@docker dockerfile]# vim dockerfile-cmd-test
 
FROM centos
CMD ["ls","-a"]
2.构建镜像
[root@docker dockerfile]# docker build -f dockerfile-cmd-test -t cmdtest .
.............
Successfully built 509ea5f2ed84
3.run运行
[root@docker dockerfile]# docker run cmdtest
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
........................................
4.我们想追加一个命令-l ,ls   -al
[root@docker dockerfile]# docker run cmdtest -l
docker: Error response from daemon: oci runtime error: exec: "-l": executable file not found in $PATH.
 
#cmd的情况下-l 替换了CMD ["ls","-a"]的命令,而-l不是命令所以报错
解决办法用CMD的情况下如果想要替换它怎么操作呢?如下:
[root@docker dockerfile]# docker run cmdtest ls -al
total 8
drwxr-xr-x  17 root root  248 Sep 24 03:33 .
drwxr-xr-x  17 root root  248 Sep 24 03:33 ..
-rwxr-xr-x   1 root root    0 Sep 24 03:33 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Sep 24 03:33 dev
drwxr-xr-x  55 root root 4096 Sep 24 03:33 etc
.......
注我们需要一个完整的路径来替换,比较麻烦
2.测试ENTRYPOINT
1.编写dockerfile文件
[root@docker dockerfile]# vim dockerfile-entrypoint-test
 
FROM centos
ENTRYPOINT ["ls","-a"]
2.构建镜像
[root@docker dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint .
3.启动镜像
[root@docker dockerfile]# docker run -it entrypoint
.   .dockerenv    dev  home  lib64       media  opt   root  sbin    sys  usr
..  bin        etc  lib   lost+found  mnt    proc  run   srv    tmp  var
4.运用cmd下面会报错,运用ENTRYPOINT我们的追加命令会直接拼接在ENTRYPOINT命令后面
[root@docker dockerfile]# docker run -it entrypoint -l
total 8
drwxr-xr-x  17 root root  248 Sep 24 06:35 .
drwxr-xr-x  17 root root  248 Sep 24 06:35 ..
-rwxr-xr-x   1 root root    0 Sep 24 06:35 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  380 Sep 24 06:35 dev
drwxr-xr-x  55 root root 4096 Sep 24 06:35 etc
drwxr-xr-x   2 root root    6 Nov  3  2020 ho
注:docker中很多命令都十分 相似,我们需要了解他们的区别。