volumes:
- ./deployment/mysql/data:/var/lib/mysql # 挂载数据库数据
- ./deployment/mysql/conf/my.cnf:/etc/mysql/my.cnf # 挂载配置文件
- ./deployment/mysql/init:/docker-entrypoint-initdb.d/ # 挂载数据初始化sql脚本
ports:
- "3306:3306"
restart: always
web:
build: .
expose:
- "8000"
volumes:
- .:/my_blog
- /tmp/logs:/tmp
command: bash start.sh
links:
- db
- redis
depends_on:
- db
- redis
restart: always
nginx:
build: deployment/nginx
ports:
- "80:80"
- "443:443"
expose:
- "8000"
volumes:
- ./collect_static:/usr/share/nginx/html/static # 挂载静态文件
- ./media:/usr/share/nginx/html/media # 挂载上传文件
- ./deployment/nginx/ssl:/usr/share/nginx/ssl # 挂载ssl证书目录
links:
- web
depends_on:
- web
restart: always
redis,db,web,nginx为容器名称。
image表示拉取镜像名称, build 会在给定目录下寻找 Dockerfile 并构建容器环境。
expose表示将端口暴露给其他容器,但 不 暴露给主机(不同容器默认相互隔离)。
ports表示将该容器端口映射到主机端口(从右往左读,例如ports: – “3307:3306″,是指把容器的3306端口映射到主机的3307端口),同时该容器端口也会对其他容器开放。
volumes表示挂载,就是将本机的文件和容器中的文件映射起来,容器和本地环境本来是隔离的,挂载相当于是凿了一个小洞,让两者数据可以互通。
links表示将容器互联起来。
depends_on:表示依赖关系,因为容器的启动有先后顺序,django 容器依赖于 mysql 容器和 redis 容器(django需要从数据库和缓存中读写数据),而 nginx 依赖于 django 容器(nginx 容器需要反向代理 django 容器的8000端口)
九. 构建、运行容器
在构建运行容器之前,需要修改 django 项目的 settings.py 文件。
将 数据库连接 HOST 改为 mysql 容器名称 db
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # mysql驱动
'NAME': 'my_blog', # 数据库名称
'USER': 'root', # 登录帐号
'PASSWORD': '19960331', # 登录密码
'HOST': 'db', # 主机地址(容器部署)
# 'HOST': '127.0.0.1', # 主机地址
'PORT': '3306', # 端口
'OPTIONS': {'charset': 'utf8mb4'},
}
}将缓存配置中的 host 改为 redis 容器名称 redis (如果你配置了redis作为缓存的话,没配置的话请忽略)
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://redis:6379', # redis(容器)










