version: "3"
services:
app:
restart: always # 除正常工作外,容器会在任何时候重启
build: . # 指定当前目录基于Dockerfile构建容器并按app配置启动
command: bash -c "python3 manage.py collectstatic --no-input && python manage.py makemigrations && python3 manage.py migrate && gunicorn --timeout=30 --workers=4 --bind :8000 dockeruser.wsgi:application"
volumes:
- .:/code #容器/code文件夹使用宿主机当前目录下的代码
- static-volume:/code/collected_static #
expose: #暴露容器端口8000
- "8000"
depends_on: # 等待db容器启动
- db
networks:
- web_network
- db_network
db:
image: mysql:5.7
volumes:
- "./mysql:/var/lib/mysql"
ports: # 开放宿主机端口3306给容器3306端口
- "3306:3306"
volumes: # 将宿主机MySQL配置为utf-8并替代容器固定路径下配置
- ./config/mysql/custom.cnf:/etc/mysql/conf.d/custom.cnf
restart: always
environment: # 设置环境变量配置MySQL用户名密码
- MYSQL_ROOT_PASSWORD=mypassword
- MYSQL_DATABASE=django_app
- LANG=C.UTF-8
networks:
- db_network
nginx:
restart: always
image: nginx:latest
ports:
- "80:8000"
volumes:
- static-volume:/code/collected_static # 将Django静态文件挂在给容器
- ./config/nginx:/etc/nginx/conf.d # 将宿主机配置覆盖容器配置
depends_on: # 等待app启动
- app
networks:
- web_network
networks:
web_network:
driver: bridge
db_network:
driver: bridge
volumes:
static-volume: