Django & Docker :管理生产环境和开发环境之间的依赖关系
Django & Docker : manage dependencies between production & dev environment
我正在悄悄地从使用虚拟机切换到 docker。我从我的开发环境开始。
我习惯于将我的设置文件分成 base.py
和 dev.py
以及 prod.py
。 prod.py
有一些我在开发过程中不需要的应用程序,例如 newrelic / error trackers 和 DEBUG=False
.
你如何用 docker 来管理这个?您使用不同的设置构建多个图像?或者是否有更好的解决方案来管理此问题?
这是我使用的 docker-compose.yml
文件:
version: '2'
services:
db:
image: postgres
environment:
POSTGRES_USER: 'user'
POSTGRES_PASSWORD: 'pass'
POSTGRES_DB: 'name'
web:
build: ./project
image: project
command: /usr/local/bin/gunicorn project.wsgi:application -w 2 -b :8000 --reload
ports:
- "8000:8000"
depends_on:
- db
您可以利用 docker compose 的 variable substitution 功能,通过主机的环境变量控制应用程序的所有行为。例如,POSTGRES_USER、POSTGRES_PASSWORD 可以在开发机器和部署机器中定义为具有不同值的环境变量。
您还可以定义两个不同的构建映像,并根据环境变量使用每个映像
build: ./project-${HOST}
并且在 project-dev
中有一个具有开发依赖项的 Dockerfile,在 project-deploy
中有另一个 Dockerfile。
我正在悄悄地从使用虚拟机切换到 docker。我从我的开发环境开始。
我习惯于将我的设置文件分成 base.py
和 dev.py
以及 prod.py
。 prod.py
有一些我在开发过程中不需要的应用程序,例如 newrelic / error trackers 和 DEBUG=False
.
你如何用 docker 来管理这个?您使用不同的设置构建多个图像?或者是否有更好的解决方案来管理此问题?
这是我使用的 docker-compose.yml
文件:
version: '2'
services:
db:
image: postgres
environment:
POSTGRES_USER: 'user'
POSTGRES_PASSWORD: 'pass'
POSTGRES_DB: 'name'
web:
build: ./project
image: project
command: /usr/local/bin/gunicorn project.wsgi:application -w 2 -b :8000 --reload
ports:
- "8000:8000"
depends_on:
- db
您可以利用 docker compose 的 variable substitution 功能,通过主机的环境变量控制应用程序的所有行为。例如,POSTGRES_USER、POSTGRES_PASSWORD 可以在开发机器和部署机器中定义为具有不同值的环境变量。 您还可以定义两个不同的构建映像,并根据环境变量使用每个映像
build: ./project-${HOST}
并且在 project-dev
中有一个具有开发依赖项的 Dockerfile,在 project-deploy
中有另一个 Dockerfile。