Dockerfile 中 RUN, CMD, ENTRYPOINT 的區別


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 里的參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM