每次更改后重建容器?

时间:2014-06-17 20:14:09

标签: docker

如果您有以下情况,Docker documentation建议使用ONBUILD指令:

  

例如,如果您的映像是可重用的python应用程序构建器,则需要将应用程序源代码添加到特定目录中,并且可能需要在此之后调用构建脚本。您现在不能只调用ADD和RUN,因为您还无法访问应用程序源代码,并且每个应用程序构建都会有所不同。您可以简单地为应用程序开发人员提供一个样板Dockerfile来复制粘贴到他们的应用程序中,但这样做效率低,容易出错且难以更新,因为它与特定于应用程序的代码混合在一起。

基本上,这一切听起来都不错,但这确实意味着我每次更改内容时都必须重新创建应用容器,即使它只是一个错字。

这似乎不是非常有效,例如在创建用于在浏览器中更改内容,保存和点击刷新的Web应用程序时。

你是如何处理的?

1 个答案:

答案 0 :(得分:81)

  

意味着每次我改变某些东西时都必须重新创建app容器,即使它只是一个错字

不一定,您可以使用-v选项将docker run命令注入项目文件放入容器中。因此,您不必重建docker镜像。

请注意,ONBUILD指令适用于Dockerfile继承父级Dockerfile FROM的情况。当Docker构建子Dockerfile的映像时,将运行父Dockerfile中的ONBUILD指令。


  

这似乎不是非常有效,例如在创建用于在浏览器中更改内容,保存和点击刷新的Web应用程序时。

如果您在迭代应用程序代码时使用Docker容器来提供Web应用程序,那么我建议您创建一个特殊的Docker镜像,其中只包含运行应用程序但应用程序代码的所有内容。

然后在主机上共享包含应用程序代码的目录,其中包含在docker容器中提供应用程序文件的目录。

例如,如果我正在开发静态网站并且我的工作区位于/home/thomas/workspace/project1/,那么我将启动一个运行nginx的容器:

docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx

这样我可以更改/home/thomas/workspace/project1/中的文件,并且无需重建docker镜像甚至重新启动docker容器即可实时更改更改。