Dockerfile中的重启是否有意义?
在我的情况下,我得到了一个带有apache httpd的Dockerfile。在该文件中有一些配置Web服务器的操作。在文件的末尾,它显示RUN service apache2 restart
。这对我来说似乎很奇怪。
我仍然习惯了Docker的概念。我将docker镜像概念化为安装cd和docker容器作为已安装的机器。 然后,Dockerfile本身就是在刻录CD映像之前要遵循的一组指令。 从这个角度来看,在刻录CD之前重启apache似乎毫无用处。这个概念化我是对的吗? 或者,或者我是否正确声明该文件最后不需要重新启动?
答案 0 :(得分:2)
你是对的 - 这没有多大意义。它会尝试启动一个httpd,所以可能会做一些初始文件设置。
您可能会看到尝试在容器中启动HTTPD,例如CMD
/ ENTRYPOINT
- 它更有意义,因为restart
意味着真的"停止和开始"。
停止是多余的,但无害,所以如果您不确定它是否已经运行,这实际上是启动httpd的一种相当常见的方式。
答案 1 :(得分:0)
虽然,您可以使用RUN
指令重新启动apache2
之类的服务,因为通过Dockerfile
创建图像的灵活性,不推荐使用它。请参阅Dockerfile Best Practices and most common use cases
RUN
可能最常见的RUN用例是应用程序 apt-get的。使用apt-get时...
CMD
应该使用CMD指令来运行包含的软件 你的形象,以及任何争论。几乎总是应该使用CMD 以CMD [“可执行文件”,“param1”,“param2”......]的形式。因此,如果 图像是用于服务(Apache,Rails等),你会运行一些东西 喜欢CMD [“apache2”,“ - DFOREGROUND”]。的确,这种形式的 建议任何基于服务的图像使用指令。
因此,使用带有service restart
指令的CMD
会更合适。