Docker,更新图像还是仅使用绑定(bind)安装来获取网站代码?

标签 docker docker-compose

我正在使用 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/

相关文章:

python - 在 Jython StreamSets 中导入 python 模块 - ImportError : No module named

python - docker-compose 附加后挂起

ruby-on-rails - 在 Docker 上修改 Rails 应用程序时,如何加载源代码更改?

Angular 无法连接到 docker compose 中的 spring boot 端点

docker-compose - Traefik docker-compose 仅​​创建一个前端路由而不是 3 个

docker - 为什么docker登录会在Travis CI上挂起?

python - 在 Docker 中执行 python 脚本

docker - 当未打开端口8080时,Traefik仪表板不显示

docker-compose.yml : Why does restart "no" have to have quotation marks?

docker - 将环境变量传递到通过Compose Yaml构建的Docker文件中