<span class="hljs-keyword">RUN<span class="bash"> 指令:用于指定 docker build 过程中要运行的命令。
语法格式:
<span class="hljs-keyword">RUN<span class="bash"> <<span class="hljs-built_in">command> 或
<span class="hljs-keyword">RUN<span class="bash"> [<span class="hljs-string">"<executeable>",<span class="hljs-string">"<param1>",<span class="hljs-string">"param2",...]
<span class="hljs-keyword">RUN<span class="bash"> [<span class="hljs-string">"/bin/bash",<span class="hljs-string">"-c",<span class="hljs-string">"<executeable>",<span class="hljs-string">"param1",<span class="hljs-string">"param2",...]
例如:
<span class="hljs-keyword">RUN<span class="bash"> yum install iproute nginx && yum clean all
</span></span></span></span></executeable></span></span></span></span></span></span></param1></span></executeable></span></span></span></span></span></span></span></span>
<span class="hljs-keyword">CMD<span class="bash"> 指令:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同;CMD 在docker run 时运行,而非docker build;
<span class="hljs-keyword">CMD<span class="bash"> 指令的首要目的在于为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束;注意: CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
语法格式:
<span class="hljs-keyword">CMD<span class="bash"> <<span class="hljs-built_in">command> 或
<span class="hljs-keyword">CMD<span class="bash"> [<span class="hljs-string">"<executeable>",<span class="hljs-string">"<param1>",<span class="hljs-string">"<param2>",...]
<span class="hljs-keyword">CMD<span class="bash"> [<span class="hljs-string">"<param1>",<span class="hljs-string">"<param2>",...] 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数;
注意:如果 dockerfile 中如果存在多个<span class="hljs-keyword">CMD<span class="bash">指令,仅最后一个生效;
例如:
<span class="hljs-keyword">CMD<span class="bash"> [<span class="hljs-string">"/usr/sbin/httpd",<span class="hljs-string">"-c",<span class="hljs-string">"/etc/httpd/conf/httpd.conf"]
</span></span></span></span></span></span></span></param2></span></param1></span></span></span></param2></span></param1></span></executeable></span></span></span></span></span></span></span></span></span></span>
<span class="hljs-keyword">ENTRYPOINT<span class="bash"> 指令:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序;但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序;
语法格式:
<span class="hljs-keyword">ENTRYPOINT<span class="bash"> <<span class="hljs-built_in">command> 或
<span class="hljs-keyword">ENTRYPOINT<span class="bash"> [<span class="hljs-string">"<executeable>",<span class="hljs-string">"<param1>",<span class="hljs-string">"<param2>",...]
例如:
<span class="hljs-keyword">CMD<span class="bash"> [<span class="hljs-string">"-c"]
<span class="hljs-keyword">ENTRYPOINT<span class="bash"> [<span class="hljs-string">"top",<span class="hljs-string">"-b"]
</span></span></span></span></span></span></span></param2></span></param1></span></executeable></span></span></span></span></span></span></span></span>
<span class="hljs-keyword">ENTRYPOINT<span class="bash"> 与 CMD 区别
如:
<span class="hljs-keyword">FROM ubuntu:<span class="hljs-number">14.10
<span class="hljs-keyword">ENTRYPOINT<span class="bash"> [<span class="hljs-string">"top", <span class="hljs-string">"-b"]
<span class="hljs-keyword">CMD<span class="bash"> [<span class="hljs-string">"-c"]
把可能需要变动的参数写到 <span class="hljs-keyword">CMD<span class="bash"> 里面。然后你可以在 docker run 里指定参数,这样 CMD 里的参数(这里是-c) 就会被覆盖掉而 ENTRYPOINT 里的不被覆盖。
注意:
<span class="hljs-keyword">ENTRYPOINT<span class="bash">有两种写法,第二种(shell form)会屏蔽掉 docker run 时后面加的命令和 CMD 里的参数。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
Original: https://www.cnblogs.com/saolv/p/12852818.html
Author: 扫驴
Title: 转载Dockerfile 中 RUN, CMD, ENTRYPOINT 的区别
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535001/
转载文章受原作者版权保护。转载请注明原作者出处!