【问题标题】:How to serve static files from a Dockerized Python web app?如何从 Dockerized Python Web 应用程序提供静态文件?
【发布时间】:2015-03-07 13:21:14
【问题描述】:

我有一个位于 Nginx 后面的 Python Web 应用程序,并通过 Gunicorn 提供服务。

我已经对其进行了配置,以便 Nginx 直接从磁盘服务器静态文件,它只与 Gunicorn 对话以获取图像等静态资产。

我的问题:

  1. 将 Web 应用程序与静态资产一起 docker 化是一个好主意还是一个大“不”?

  2. 如果我想在需要访问相同资产的 2 台服务器中部署我的容器,我如何才能让静态资产像容器化应用一样可移植?

如果可能的话,我想拥有什么:

我想将我的应用程序放在一个容器中,并且我想让它尽可能地便携,而不是花费更多的资金购买额外的资源,例如用于保存图像的单独服务器(如数据库)

【问题讨论】:

    标签: python docker containers portability dockerfile


    【解决方案1】:

    如果您知道您的应用将永远拥有相同的静态资产,那么只需将它们与应用一起容器化并完成即可。

    但是情况会发生变化,所以当您需要它时,我会推荐 Docker Volume Container 方法:将您的静态资产放在 DVC 中,然后将该 DVC 挂载到主容器中,这样它几乎就是“一个应用程序容器”。你可以像这样使用 Docker Compose:

    appdata:
        image: busybox
        volumes:
            - /path/to/app/static
        command: echo "I'm just a volume container"
    app:
        build: .
        volumes_from:
            - appdata
        command: …
    

    您可以通过使用引导脚本启动容器来进一步扩展,该引导脚本在启动时将初始静态文件复制到目标路径。这样可以保证您的应用程序始终具有默认设置来启动,但您可以随着应用程序的增长添加更多静态文件。例如,拉取官方 Jenkins 容器并阅读/usr/local/bin/jenkins.sh

    【讨论】:

    • 这听起来是个好主意。我将检查 DVC 方法。同时,如果可以的话,您能否详细说明一下答案,重点是如何处理网络应用程序可能拥有的上传图像?想象一下,将产品图像或图像添加到应该像多台机器上的容器一样扩展(可移植性)并且易于在机器之间携带的博客文章。怎么可能呢?谢谢!
    • @Phil 如果您有一个 Docker 主机,那么您的所有应用程序容器都可以共享 DVC 以访问静态媒体。如果您有多个 Docker 主机,就像大多数大型生产 Docker 系统一样,那么答案很重要。
    • 前者是“不平凡的”。后者是我在原始问题中要求学习和理解的内容。
    【解决方案2】:

    我同意 kojiro 的观点,如果事情没有太大变化,请使用您的应用程序将静态文件容器化。关于您的第二个问题,您似乎认为 Docker Volume Container 方法仍然不够灵活,因为您将拥有多个 docker 主机。也许 Flocker 可以满足您的要求?来自 Flocker 文档 (https://docs.clusterhq.com/en/0.3.2/):

    Flocker 可让您将 Docker 容器及其数据一起移动 Linux 主机之间。这意味着您可以运行您的数据库, Docker 中的队列和键值存储,并轻松移动它们 作为您应用程序的其余部分。即使是无状态的应用程序也依赖于许多有状态的 服务和当前在 Docker 容器中运行这些服务 生产几乎是不可能的。 Flocker旨在通过以下方式解决这个问题 提供一个编排框架,允许您同时移植您的 环境之间的有状态和无状态容器。

    【讨论】:

    • ikkjo,可以安全地假设这是一个尚未普遍解决的问题吗?移植/共享/服务不断变化的静态资产(例如,上传的图像)?我会检查flocker btw --> 谢谢!
    • 至少据我了解,这并没有得到普遍解决。我也不确定会不会。即使您在没有 docker 的传统集群上运行,您也会有不同的选择来处理数据和数据复制,具体取决于您的需要,我想这在 docker 世界中是相同的,实现是不同需求之间的权衡.
    • 我明白了。那就在 CDN 上花很多钱吧。
    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 2019-09-05
    • 2015-06-04
    • 2017-04-17
    • 2013-05-05
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多