python - 如何从 Dockerized Python Web 应用程序提供静态文件?

标签 python docker containers portability dockerfile

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

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

我的问题:

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

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

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

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

最佳答案

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

但情况会发生变化,所以当您需要时,我会推荐 Docker Volume Container方法:将您的静态 Assets 放在 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

关于python - 如何从 Dockerized Python Web 应用程序提供静态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28915295/

相关文章:

docker nginx ERR_NAME_NOT_RESOLVED

python - 将 for 循环中的元素分配给另一个列表

python - 在 python 中隐藏 chromeDriver 控制台

Python rpy2 和 quantmod 示例

docker - 如何在 docker hub 上为存储库/图像设置 Logo

C++ 可变参数模板

c++ - 是否有一个具有动态大小但在 C++ 中没有分配的容器?

python比较不同时区的日期时间

docker - 在内容更改时重新加载Nginx容器

sqlite - 当 MediaWiki 尝试从安装到 docker conainer 的 sqlite db 读取数据时,它会引发 DBTransactionStateError