RUN 指令:

用于指定 docker build 过程中要运行的命令。

  1. 语法格式:
  2. RUN <command>
  3. RUN ["<executeable>","<param1>","param2",...]
  4. RUN ["/bin/bash","-c","<executeable>","param1","param2",...]
  5. 例如:
  6. RUN yum install iproute nginx && yum clean all

CMD 指令:

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同;
CMD 在docker run 时运行,而非docker build;
CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束;
注意: CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

  1. 语法格式:
  2. CMD <command>
  3. CMD ["<executeable>","<param1>","<param2>",...]
  4. CMD ["<param1>","<param2>",...] 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数;
  5. 注意:如果 dockerfile 中如果存在多个CMD指令,仅最后一个生效;
  6. 例如:
  7. CMD ["/usr/sbin/httpd","-c","/etc/httpd/conf/httpd.conf"]

ENTRYPOINT 指令:

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序;但是, 如果运行 docker run 时使用了 —entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序;

  1. 语法格式:
  2. ENTRYPOINT <command>
  3. ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
  4. 例如:
  5. CMD ["-c"]
  6. ENTRYPOINT ["top","-b"]
  7. ENTRYPOINT CMD 区别
  8. 如:
  9. FROM ubuntu:14.10
  10. ENTRYPOINT ["top", "-b"]
  11. CMD ["-c"]

把可能需要变动的参数写到 CMD 里面。然后你可以在 docker run 里指定参数,这样 CMD 里的参数(这里是-c) 就会被覆盖掉而 ENTRYPOINT 里的不被覆盖。

注意:
ENTRYPOINT有两种写法,第二种(shell form)会屏蔽掉 docker run 时后面加的命令和 CMD 里的参数。