RUN 指令:用於指定 docker build 過程中要運行的命令。
語法格式:
RUN <command> 或
RUN ["<executeable>","<param1>","param2",...]
RUN ["/bin/bash","-c","<executeable>","param1","param2",...]
例如:
RUN yum install iproute nginx && yum clean all
CMD 指令:類似於 RUN 指令,用於運行程序,但二者運行的時間點不同;CMD 在docker run 時運行,而非docker build;
CMD 指令的首要目的在於為啟動的容器指定默認要運行的程序,程序運行結束,容器也就結束;注意: CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。
語法格式:
CMD <command> 或
CMD ["<executeable>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] 該寫法是為 ENTRYPOINT 指令指定的程序提供默認參數;
注意:如果 dockerfile 中如果存在多個CMD指令,僅最后一個生效;
例如:
CMD ["/usr/sbin/httpd","-c","/etc/httpd/conf/httpd.conf"]
ENTRYPOINT 指令:類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序;但是, 如果運行 docker run 時使用了 --entrypoint 選項,此選項的參數可當作要運行的程序覆蓋 ENTRYPOINT 指令指定的程序;
語法格式:
ENTRYPOINT <command> 或
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
例如:
CMD ["-c"]
ENTRYPOINT ["top","-b"]
ENTRYPOINT 與 CMD 區別
如:
FROM ubuntu:14.10
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
把可能需要變動的參數寫到 CMD 里面。然后你可以在 docker run 里指定參數,這樣 CMD 里的參數(這里是-c) 就會被覆蓋掉而 ENTRYPOINT 里的不被覆蓋。
注意:
ENTRYPOINT有兩種寫法,第二種(shell form)會屏蔽掉 docker run 時后面加的命令和 CMD 里的參數。