我正在使用 Django,但我想这个问题适用于任何网络项目。
在我们的例子中,有两种类型的代码,第一种是 python 代码(在 django 中运行),其他的是静态文件(html/js/css)
当任何代码发生变化时,我可以发布新图像。
或者我可以使用 bind mounts
对于代码。 (对于 django,我们可以绑定(bind)挂载项目根目录和静态目录)
如果我使用 bind mounts
对于代码,我可以在代码更改时更新生产机器(可能使用 git pull
)。
然后,docker image 将处理严格来说不是我们自己的代码更改的更新。 (例如库更新或新设置,例如设置 Elasticsearch )。
这种方法是否意味着任何明显的缺点?
最佳答案
出于安全原因,建议使用最新的安全补丁使操作系统保持最新,但 docker 镜像旨在以不可变的方式发布,以便我们始终能够在生产之外重现生产问题,因此操作系统不会更新本身用于发布安全补丁。所以这意味着我们需要经常重建和部署我们的 docker 镜像以保持安全。
所以我更愿意用我的代码和静态文件发布一个新的 docker 镜像,因为它们必然会更频繁地更改,因此需要频繁发布,这意味着您可以让操作系统在安全补丁方面保持最新,而无需重建生产中的 docker 镜像只是为了让操作系统保持最新。
注意我在这里假设您至少每周发布一次新代码或静态文件,否则我仍然建议至少每周更新一次 docker 镜像,以便为所有正在使用的软件获取最新的安全补丁。
关于Docker,更新图像还是仅使用绑定(bind)安装来获取网站代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519543/