【问题标题】:How can I update data in volume after web project was updated?Web 项目更新后如何批量更新数据?
【发布时间】:2023-04-05 16:39:01
【问题描述】:

我有一个在 docker 容器中运行的 Flask 应用程序 + Gunicorn。我在另一个容器中也有 Nginx,并且想提供静态文件(例如 Flask 应用程序的静态文件夹中的 js 文件),为此我必须创建卷并将其附加到静态卷。

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

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

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

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

  1. 停止使用volume的容器(现在只有Flask + Gunicorn app,Nginx还没有使用volume):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 文件版本。

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

【问题讨论】:

    标签: python-3.x docker nginx flask


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 其实我同意你的观点,与代码本身相关的东西不应该存储在卷中,但是在我开始做项目的部署方面之前,应用程序是如何被 docker 化的(在我只写之前后端 Python 代码 + 一些 js 小文件),所以我尝试找出是否有任何理由使用 nginx 提供 js 文件并在此将它们存储在卷中。
    • 您实际上可以使用 docker cp 或从容器运行 shell 命令,这将影响卷数据(例如复制新版本的文件并使用符号链接引用它)。但我一点也不喜欢它
    • 好吧,我们的团队非常小,所以我将继续为项目做 devops 部分,在容器中更改文件执行命令听起来非常手动的解决方案,与更新文件时重新创建卷相当。如果没有其他意见,我会听从你的建议,我们将停止使用 nginx dockerized 代理提供 js 文件。
    • 不客气,不要害怕你做对了。您的文件实际上是代码的一部分,因此您将它们视为代码。
    • 另外,如果你认为 nginx 更有效地提供文件,你可以在你的构建系统中从你的 git repo 创建多个容器。一个带有 nginx 和静态文件,一个带有动态生成的内容,并将它们放在 kubernetes/ 的同一个 pod 中,但这会使事情复杂化,如果我是你,我只会在看到性能问题并且可以证明我得到通过专用基准提高性能。让我们不要修复并让没有损坏的东西变得更复杂。
    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多