1, CMD只能用1次
解释:CMD指令中指定的命令会在镜像运行时执行,在Dockerfile中只能存在一个,如果使用了多个CMD指令,则只有最后一个CMD指令有效。当出现ENTRYPOINT指令时,CMD中定义的内容会作为ENTRYPOINT指令的默认参数,也就是说可以使用CMD指令给ENTRYPOINT传递参数。
注意:RUN和CMD都是执行命令,他们的差异在于RUN中定义的命令会在执行docker build命令创建镜像时执行,而CMD中定义的命令会在执行docker run命令运行镜像时执行,另外使用第一种语法也就是调用exec执行时,命令必须为绝对路径。
[root@iZj6c1rzo7o5c9lgii7jl6Z nginx]# cat Dockerfile
FROM centos
MAINTAINER lanny Ma iher@foxmail.com
RUN yum -y install epel-release
RUN yum install -y nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN echo "hello boy!" >> /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx"]
[root@iZj6c1rzo7o5c9lgii7jl6Z nginx]# pwd
/opt/dockerfile/nginx
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
https://github.com/nginxinc/docker-nginx/blob/53da9a295dfa6c666630a72d9c03dfbd1d2eb37d/mainline/stretch/Dockerfile