You already have docker-compose.yml
, which could be your base file, and then:
docker-compose.dev.yml
for developmentdocker-compose.prod.yml
for production
Each override or extend the base. For example:
version: "3.7"
services:
web:
build: .
container_name: ca.web
ports:
- "8018:8000"
command: gunicorn app.wsgi:application
version: "3.7"
services:
web:
volumes:
- .:/usr/src/
command: tail -f /dev/null
environment:
- DEBUG=True
version: "3.7"
services:
web:
volumes: [] # Disable bind mount
restart: unless-stopped
environment:
- DEBUG=False
Use the -f
flag to load specific files:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d
You can chain multiple files; Docker will merge them in order (later files override earlier ones).
To simplify running dev vs prod, create aliases or scripts:
#!/bin/bash
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
#!/bin/bash
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d
Make them executable:
chmod +x run-dev.sh run-prod.sh
- Use
docker-compose.yml
as your base. - Create
docker-compose.dev.yml
anddocker-compose.prod.yml
to override volume, env, command, etc. - Use
-f
to specify the config when you run Compose.
Let me know if you'd like a template setup or want to include things like PostgreSQL or static file collection for prod.