本文首发于公众号:Hunter后端
这一篇文章介绍一下 docker-compose 的用法。
前面我们介绍过,一个系统的正常运行除了 Django,还需要 MySQL、Redis、Nginx 等其他系统,那么我们就可以通过 docker-compose 来部署这些系统的运行。
包括这些系统的参数,运行先后顺序,容器启动策略,运行的命令等。
接下来介绍使用 Django 和 MySQL 通过 docker-compose 启动。
以下是本篇笔记的目录:
- 安装 docker-compose
- Dockerfile 准备
- docker-compose.yml 文件介绍
- docker-compose 相关命令
1、安装 docker-compose
我这边使用的是 Mac,安装的是 Docker 的桌面版,所以会自带 docker-compose 命令。
如果没有这个依赖,需要通过下面的命令来安装:
pip3 install -U docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
2、Dockerfile 准备
Django 的 Dockerfile 我们复用前几篇笔记的内容,如下:
FROM python:3.6
RUN mkdir /hunter -p
WORKDIR /hunter
ADD ./requirements.txt /hunter
RUN cd /hunter
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
ADD ./hunter /hunter
CMD ["python3", "manage.py", "runserver", "0:9898"]
在该文件夹下有 requirements.txt,django_env_list.env,docker-compose.yml
requirements.txt 是之前我们导出的 Django 系统的依赖
django_env_list.env 文件是 Django 系统运行需要获取的环境变量
我们还需要新建一个 docker-compose.yml 文件,这个文件的作用在于规划和定义我们的系统及依赖的一些其他系统启动容器时的启动命令。
这次我们仅仅是 Django 和 MySQL 相依赖
3、docker-compose.yml 文件介绍
docker-compose.yml 文件内容如下:
version: '3.3'
services:
mysql:
image: "mysql:5.7"
volumes:
- "/.../docker-mysql-data:/var/lib/mysql"
ports:
- "23306:3306"
environment:
MYSQL_ROOT_PASSWORD: "123456"
web:
restart: always
build: .
command: bash -c "python3 manage.py migrate && python3 manage.py runserver 0:9898"
ports:
- "9898:9898"
env_file:
- django_env_list.env
services
services 的下一个层级定义的是需要运行的容器,比如 MySQL 服务,Django 服务,这里我们将 Django 服务命名为 web
mysql
以 mysql 下的参数为例:
- image 通过镜像名称和 tag 来指定需要运行的镜像
- volumes 则是挂载的命令,这一点与容器运行时候的参数是一致的
- ports 是端口映射
- environment 是环境变量
web
- restart 是该容器的重启策略,always 表示会一直重启,比如说有时候没有指定其他服务的启动顺序,启动 Django 的时候,其他 Django 依赖的服务还没有起来,always 就保证了 Django 会在这个过程中可以不断重启
- build 跟镜像的构建命令一样,在当前文件夹下寻找 Dockerfile 然后构建镜像
- command 则指定了容器启动时候的命令,这里表示使用 bash 命令运行 Django 的 migration 的运行和服务的启动
- env_file 是指定环境变量,容器启动时指定了环境变量列表
接下来介绍一下 django_env_list.env 文件的更改
文件内容如下:
ENGINE=django.db.backends.mysql
NAME=func_test
USER=root
PASSWORD=123456
HOST=mysql
PORT=3306
这里只有 HOST 的值有变化,这里面的值为 mysql,也就是在 docker-compose.yml 里我们定义的数据库的名称。
4、docker-compose 相关命令
然后我们执行下面的命令,可以看到我们定义的变量都已经读取到了文件内容:
docker-compose config
并且一些变量都进行了格式化处理:
services:
mysql:
environment:
MYSQL_ROOT_PASSWORD: '123456'
image: mysql:5.7
ports:
- published: 23306
target: 3306
volumes:
- /.../docker-mysql-data:/var/lib/mysql:rw
web:
build:
context: /.../python
command: bash -c "python3 manage.py migrate && python3 manage.py runserver 0:9898"
environment:
ENGINE: django.db.backends.mysql
HOST: mysql
NAME: func_test
PASSWORD: '123456'
PORT: '3306'
USER: root
ports:
- published: 9898
target: 9898
restart: always
version: '3.3'
docker-compose 服务启动:
docker-compose up
然后就可以看到输出信息,服务就起来了
如果是想要 docker-compose 在后台运行,可以加上 -d 参数:
docker-compose up -d
如果想要停止该项目,可以在新开的 shell 中执行:
docker-compose down
标签:compose,Django,env,mysql,Docker,9898,docker
From: https://blog.51cto.com/u_16061969/6374042