繁体   English   中英

web项目更新后如何批量更新数据?

[英]How can I update data in volume after web project was updated?

我有一个 Flask 应用程序 + Gunicorn,我在 docker 容器内运行。 I also have Nginx in another container and would like to serve static files (eg js files in static folder of Flask app), in order to do it I have to create volume and attach it to the static volume.

当我创建卷然后运行 dockerized 应用程序(Flask + Gunicorn)时没有问题,js 文件是最新的。

然后我从 Github 更新应用程序(执行git pull projectname ,然后执行docker build -t myapp.然后我得到这个问题没有改变,即卷中的文件仍然是客户端问题文件不是相同的。卷中。

该问题与 Ngnix 无关,因为它发生在 Ngnix 不提供 static 文件时(我还没有在配置中设置该选项,现在它只提供普通请求)。

我找到了以下解决问题的方法:

  1. 停止使用该卷的容器(现在仅 Flask + Gunicorn 应用程序,Nginx 尚未使用该卷): docker rm -f appname_container
  2. 删除卷:```docker volume rm flask_static_files_volume_name``
  3. 重新创建卷: docker volume create flask_static_files_volume_name
  4. 然后再次运行 Flask 应用程序: docker run... appname_container

作为 4 个步骤的结果,卷中填充了所有文件的更新版本。 我看到正确的 js 文件版本。

每次更新项目时,我都必须执行这些步骤。 据我了解,在容器重启后维护文件是正确的卷行为,但是有没有更好的方法来解决这个问题?

如果您的文件在 git 中并且不是那么大,我不会为卷而烦恼。 卷适用于经常像数据库一样移动的数据,或者可能是客户上传的文件。

对于 git 下具有明确版本控制方案的文件,对我来说,它们是您代码的一部分,因此不需要卷。 只需将它们包含在没有卷的容器中,然后在新版本中重新创建完整的容器。

这就是 docker/kubernetes 期望它完成的方式。 通过这种方式,您可以轻松地进行金丝雀测试、蓝绿色或渐进式部署,甚至回滚到以前的版本。 这些文件实际上是应用程序版本控制方案的一部分,这样更好。

您甚至可以使用“gitopts”( https://www.weave.works/technologies/gitops/ )的概念来自动更新主仓库中 git 更改上的容器。

当然,相反,如果给定版本的应用程序可以在没有任何代码发布概念的情况下提供任意文件,那么您可能需要使用某种数据库的卷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM