什么是DockerCompose
Docker Compose通过一个单独的docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
我们以flask+mysql + redis项目为例
项目目录结构如下:
- flask_project/
- app/
- other_files/
- docker-compose.yml
- Dockerfile
- requirements.txt
- run.py
使用docker Compose部署项目主要分为以下四个步骤:
1、写Dockerfile 文件 用于构建自定义flask镜像
# 基于 Python 3.8 Alpine 镜像构建
FROM python:3.8-alpine
# 设置时区环境变量
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置工作目录
WORKDIR /app
# 将当前目录下的所有文件复制到工作目录中
COPY . /app
# 安装 Python 依赖
RUN pip install -r requirements.txt
# 暴露容器端口 10020 供宿主机与容器连接使用
EXPOSE 10020
# 运行应用程序
CMD ["python", "run.py"]
2、写docker-compose.yml文件
用于创建flask容器实例 mysql容器实例 redis容器实例
配置虚拟网络 关联多个容器
version: '3.8'
services:
flaskapp:
image: testdashboards-flaskapp:latest # 表示拉取镜像(如果之前已经构建了镜像的话)没有镜像就执行下一行的build构建镜像
build: . # 表示构建镜像 . 表示当前路径下的文件 默认文件名为 Dockerfile
container_name: test_app # 定义容器名称
ports:
- "10020:10020" # Flask 端口映射
environment:
- DATABASE_URL="mysql:192.168.137.128//root:111111@test_mysql/test_db"
depends_on: # 表示依赖于这两个服务 在启动flaskqpp服务时会先启动mysql redis
- mysql
- redis
networks:
test_net:
ipv4_address: 192.168.137.130 # Flask 应用指定 IP 地址
restart: always
mysql:
image: mysql:5.7 # 表示从镜像仓库拉取mysql5.7的镜像
container_name: test_mysql # 定义容器名称
environment:
MYSQL_ROOT_PASSWORD: "111111"
MYSQL_DATABASE: test_db
MYSQL_USER: root
MYSQL_PASSWORD: "111111"
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_general_ci
volumes:
- ~/test_docker/mysql-data:/var/lib/mysql # 挂载数据卷
networks:
test_net: # 添加该服务到名为test_net 的网络中
ipv4_address: 192.168.137.128 # MySQL容器 指定 IP 地址
ports:
- "10021:3306" # 端口映射
restart: always
redis:
image: redis:latest
container_name: test_redis
ports:
- "10022:6379"
volumes:
- ~/test_docker/redis-data:/data
networks:
test_net:
ipv4_address: 192.168.137.129
restart: always
networks: # 创建一个自定义的虚拟网络
test_net:
driver: bridge
ipam:
config:
- subnet: 192.168.137.0/24
3、将flask_project文件复制到linux对应目录下
4、进入flask_project目录 执行docker-compose up -d
根据docker-compose.yml文件 创建镜像、拉取镜像、创建容器、启动容器
启动 Docker Compose 中定义的容器
-d表示后台运行
至此 容器创建并运行成功