Docker,更新图像还是只使用绑定挂载来获取网站代码?
我正在使用Django,但我想这个问题适用于任何web项目 在我们的例子中,有两种类型的代码,第一种是python代码(在django中运行),另一种是静态文件(html/js/css) 我可以在任何代码发生更改时发布新图像。Docker,更新图像还是只使用绑定挂载来获取网站代码?,docker,docker-compose,Docker,Docker Compose,我正在使用Django,但我想这个问题适用于任何web项目 在我们的例子中,有两种类型的代码,第一种是python代码(在django中运行),另一种是静态文件(html/js/css) 我可以在任何代码发生更改时发布新图像。 或者我可以使用bind mounts作为代码。(对于django,我们可以绑定挂载项目根目录和静态目录) 如果我对代码使用bind mounts,我可以在代码更改时更新生产机器(可能使用git pull) 然后,docker image将处理严格来说不是我们自己的代码更改
或者我可以使用
bind mounts
作为代码。(对于django,我们可以绑定挂载项目根目录和静态目录)
如果我对代码使用bind mounts
,我可以在代码更改时更新生产机器(可能使用git pull
)
然后,docker image将处理严格来说不是我们自己的代码更改的更新。(如库更新或新设置,如设置elasticsearch)
这种方法是否意味着任何明显的缺点 出于安全原因,建议操作系统更新最新的安全补丁,但docker映像将以不变的方式发布,以便我们始终能够在生产之外重现生产问题,因此操作系统不会因发布的安全补丁而更新自身。因此,这意味着我们需要经常重建和部署docker映像,以确保安全 因此,我更愿意使用我的代码和静态文件发布一个新的docker映像,因为它们肯定会更频繁地更改,因此需要频繁发布,这意味着您可以在安全补丁方面使操作系统更为最新,而无需在生产中重建docker映像,以使操作系统保持最新
注意,我假设您至少每周发布一次新代码或静态文件,否则,我仍然建议至少每周更新一次docker映像,以便获得所有正在使用的软件的最后一个安全补丁。通常,我所看到的针对此问题的更面向docker的解决方案会学习如何在docker映像中打包整个应用程序。这尤其包括应用程序代码 我建议这样做有三个很好的理由:
docker compose.yml
bind将当前主机目录装载到同一目录上。在这个设置中,容器环境反映了开发人员的桌面环境,并不真正测试Docker映像中内置的内容
(“静态文件”在“是应用程序还是数据?”之间的灰色区域结束在这个问题的上下文中,我倾向于将它们打包到映像中,特别是如果它们来自您的正常构建过程。这尤其包括您正在运行的应用程序的主UI。如果像大型映像或视频资产这样的东西您可以合理地托管在完全独立的服务器上,那么它可能会使您更加安全(请分开供应。)