Docker compose 用于生产和开发

Pyd*_* UA 6 django production docker docker-compose

所以我使用 Python+Django(但对于这个问题并不重要)

当我编写代码时,我只需运行

./manage.py runserver 
Run Code Online (Sandbox Code Playgroud)

它负责网络服务器、静态文件、自动重新加载等。

并且为了将其投入生产,我使用了一系列命令,例如

./manage.py collectstatic
./manage.py migrate
uwsgi --http 127.0.0.1:8000 -w wsgi --processes=4
Run Code Online (Sandbox Code Playgroud)

我还有一些其他服务,如 postgres、redis(生产和开发都很常见)

所以我试图在这里适应 docker(+ -compose) 但我无法理解如何用它拆分 prod/dev。

基本上在 docker-compose.yml你定义你的服务和图像 - 但在我的情况下,生产中的图像应该运行一个 CMD 而在开发中运行另一个..

实现这一目标的最佳做法是什么?

Tlm*_*aK0 7

您应该创建额外的 docker-compose.yml 文件,如 docker-compose-dev.yml 或 docker-compose-pro.yml 并使用 -f 命令覆盖一些原始 docker-compose.yml 配置:

docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

有时,我也会针对不同的环境使用不同的 Dockerfile 并dockerfile在 docker-compose-pro.yml 构建部分中指定参数,但我不推荐这样做,因为您会以重复的 Dockerfile 结束。

更新

Docker 引入了多阶段构建功能https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds,它允许为不同的环境创建 Dockerfile。