CMD:
这个命令是用来做什么的?查看官方文档说明:https://docs.docker.com/engine/reference/builder/#cmd
该指令有三种形式:
- CMD ["executable", "param1", "param2"] (exec form,优先使用这种方式)
- CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
- CMD command param1 param2 (shell form)
cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行命令。重点是这个" 默认"。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也侧面说明了entrypoint的含义,它(entrypooint)才是真正的容器启动以后要执行的命令。
这也是为什么很多博客文档说的"cmd会被覆盖",其实为什么会覆盖?因为cmd的角色定位就是默认,如果你不额外指定,那么就执行cmd命令,否则呢?只要你指定了,那么就不会执行cmd,也就是cmd会被覆盖。
用法3:shell form,即没有中括号的形式,那么命令command默认是在"/bin/sh -c"
下执行的。比如下面的dockerfile
From centos
CMD echo "hello cmd"
结果如下图所示: