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

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

我已经对它进行了configuration,以便Nginx可以直接从磁盘中为静态文件服务,并且只与Gunicorn通信以获取静态资源,例如图像。

我的问题:

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

  2. 如果我想在需要访问相同资源的2台服务器中部署我的容器,那么如何使静态资产像集装箱化应用程序一样可移植?

如果可能,我想要什么:

我想把我的应用程序放在一个容器中,我希望尽可能地将其移植到便携式计算机上,而不必将更多的资金投入到其他资源(如单独的服务器)上以保持图像(如数据库)

如果你知道你的应用程序将永远具有相同的静态资产,那么只需将它们与应用程序集成在一起,并完成它。

但事情会改变,所以当你需要的时候,我会推荐一个Docker容器容器的方法:把你的静态资产放在一个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: … 

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

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

Flocker允许您在Docker主机之间移动您的Docker容器及其数据。 这意味着您可以在Docker中运行您的数据库,队列和键值存储,并像其他应用程序一样轻松地移动它们。 即使是无状态的应用程序依赖于许多有状态的服务,目前在生产Docker容器中运行这些服务几乎是不可能的。 Flocker的目标是通过提供一个编排框架来解决这个问题,该框架允许你在环境之间移植有状态和无状态的容器。

Interesting Posts