CMD在Dockerfile中的重要性

我有这个Dockerfile工作正常,但我被告知,也许这不是做我想要的最好的方式:

FROM debian:jessie RUN apt-get update && apt-get install -y lighttpd php5-cgi php5-common php5 php5-mysql php5-gd RUN echo server.modules += \(\"mod_rewrite\"\) >> /etc/lighttpd/lighttpd.conf CMD ["lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"] RUN lighty-enable-mod fastcgi-php RUN service lighttpd restart RUN chown -R www-data:www-data /var/www/html 

正如你所看到的,我正在用lighttpd和php创build一个容器的映像。

我的问题是关于我的Dockerfile中CMD部分的位置。 有人告诉我最好把文件放在文件末尾,但正如你所看到的那样,我在中间做了这个,工作得很好。

它不会停止创build,也不会干扰在其下面的运行部分中的service lighttpd restart

有没有最好的做法,这是正常的? 我可以在apt-get安装后用我的CMD创build一个Dockerfile吗?

感谢您对我的问题的回答,如果有任何重大错误,请回覆我的英文。

我相信这更符合逻辑偏好,当图像尚未准备就绪时,无需定义命令。 将CMD或ENTRYPOINT设置为shell进行debugging可能会使debugging失败的构build变得更简单,这样做更加方便。 但除此之外,最后一个ENTRYPOINT和/或CMD会修改图像的configuration,并inheritance所有子图像(Dockerfile的每一行)。

使用默认命令将Docker中的CMD条目放入Docker的位置并不重要(如果存在多个Docker,则使用最后一个)。 在哪里可能会有所作为,如果你想构build你的构build,以优化caching层。 也就是说,你想把所有可能在Dockerfile中变得更低的东西。

我认为把它放在最后,让阅读变得更容易。 你的情况是否有一个特定的原因,你不想把它放在最后?