Django 上有一个网站,在生产服务器上我使用 uWSGI / Nginx bundle 启动,本地开发是 Django virtualenv / dev-server
从一些关于 SO 的问题中:
又来了几个。
Docker 镜像中包含什么?
我们有一个生产版本和一个开发版本。据我了解,生产分布在存储库中。
为开发者版本(对我来说,项目代码和 virtualenv)创建一个 docker 镜像有意义吗?还是开发人员只需要存储库中的代码即可开始开发?
生产 docker 镜像是在哪里创建的?
生产服务器上有一个项目在指定的包上运行 - uwsgi/nginx/packer 具有生产设置。我应该在生产服务器上收集图像吗?
应该没有镜像的生产版本和非生产版本的概念。开发人员、测试人员、维护人员和其他所有人都必须使用相同版本的映像。
开发过程可以以完全不同的方式安排,但如果使用 docker 镜像(例如,由另一个组开发的服务器)作为外部依赖,那么它应该与其他需求相同的来源 - 测试,操作等。
如何、在何处以及使用什么 docker 映像创建?
成像过程必须完全自动化以避免错误并使过程可重复。
大致来说,制作图像的过程是这样的(我省略了一些步骤):
如果没有特定要求,那么可以使用任何持续集成服务器 - Jenkins、TeamCity、Bamboo等来管理创建过程。它们都有相应的插件,或者您可以编写简单的 shell 脚本并使用标准命令创建图像
docker build
。docker 镜像中应该包含什么?
这个问题很难给出明确的答案,因为很大程度上取决于图像的类型和个人喜好。我将写下我将如何处理Django服务器。
我对Django的工作不多,所以如果我说的不正确,请纠正我。
如果项目刚刚开始并且服务的负载很小,那么我会将所有内容(数据库除外)放在一个图像中。那些。该图像将包含:
数据库要么在单独的镜像中,要么在不使用容器化的单独服务器上。如果数据库以单独的方式运行,那么注意将数据保存到外部(相对于容器)磁盘分区很重要。否则,容器重启时数据会丢失。
如果负载很大并且有很多静态页面,那么我会制作几张图片:
如果项目非常大,那么静态和动态部分可能由不同的团队制作,在这种情况下,他们将负责为
Dockerfile
他们的项目部分做准备。