Docker‑Compose
Docker‑Compose 学习笔记
一、Docker‑Compose 是什么
Compose 是Docker官方推出的多容器编排部署工具,用来管理由多个Docker容器组成的整套业务应用。
- 编写
docker‑compose.ymlYAML配置文件,定义容器之间依赖、调用关系、网络、数据卷; - 一条命令即可一次性启动、关闭整套业务所有容器。
为什么需要Docker‑Compose
Docker最佳实践:一个容器只运行单个服务。
一套微服务项目通常需要 MySQL、Redis、后端业务服务、Nacos等多个容器;
如果手动逐条执行docker run创建容器,需要管控启动顺序、容器IP、容器网络,部署和维护十分麻烦。
Compose允许通过单个
docker‑compose.yml,定义一组关联容器作为一个业务工程,一键部署所有服务依赖,解决容器编排、启停顺序、网络互通难题。
二、Docker‑Compose 核心概念
配置载体:docker‑compose.yml
两大核心要素
- service(服务):单个应用容器实例,例如 mysql容器、redis容器、his‑c6‑basedata业务微服务容器;
- project(工程):一组彼此关联的业务容器,完整业务单元,由yml配置文件定义。
三、Docker‑Compose 使用三大步骤
- 编写
Dockerfile,打包各个微服务,生成业务镜像; - 编写
docker‑compose.yml配置文件,编排所有容器服务、依赖关系、启动顺序; - 执行启动命令,一键拉起整套应用。
# 前台启动
docker‑compose up
# 后台守护进程启动(生产常用)
docker‑compose up -d
四、手动部署多容器的痛点(不使用Compose)
手动部署流程
- 单独启动MySQL容器
- 单独启动Redis容器
- 启动后端微服务容器
现存缺陷
- 启动顺序硬性约束:必须先启动MySQL、Redis之后,业务微服务才可正常连接;
- 需要记忆多条冗长的
docker run命令; - 容器重启之后IP地址会发生变化,硬编码IP容易出现连接失败;
- 容器之间网络互通配置繁琐。
解决方案:使用Docker‑Compose统一编排管理
Compose完整部署流程
- 编写
docker‑compose.yml编排配置; - 修改微服务数据库、中间件连接地址,改用服务名访问(不需要硬编码容器IP);
- 后台启动整套容器
docker‑compose up -d; - 进入MySQL容器,初始化业务数据库、数据表;
- Swagger接口地址测试:
http://服务器IP:服务端口/swagger‑ui.html#/
五、docker‑compose.yml 配置示例(MySQL模板)
version: "3"
services:mysql:image: mysql:8.4environment:MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'db2021'MYSQL_USER: 'zzyy'MYSQL_PASSWORD: 'zzyy123'ports:- "3306:3306"volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker‑entrypoint‑initdb.dnetworks:- atguigu_netcommand: --default‑authentication‑plugin=mysql_native_passwordnetworks:atguigu_net:
配置说明
environment:设置MySQL环境变量、账号密码、初始化数据库;ports:宿主机端口‑容器端口映射;volumes:数据卷挂载,实现配置、持久化数据、初始化脚本宿主机和容器同步;networks:自定义桥接网络,Compose内部容器依靠服务名互相访问;command:指定mysql8.0认证插件,解决外部程序无法连接MySQL问题。
六、Docker‑Compose 全套常用命令
# 查看帮助文档
docker‑compose -h# 前台启动所有编排服务
docker‑compose up# 后台守护模式启动服务
docker‑compose up -d# 停止服务,并且删除容器、自定义网络、数据卷
docker‑compose down# 进入指定服务id对应的容器内部
docker‑compose exec 服务id /bin/bash# 查看当前编排正在运行的容器列表
docker‑compose ps# 查看容器内部运行进程
docker‑compose top# 查看指定服务容器运行日志
docker‑compose logs 服务id# 校验yml配置文件语法
docker‑compose config# 静默校验配置,仅出错时输出日志
docker‑compose config -q# 重启全部服务
docker‑compose restart# 启动已经停止的容器
docker‑compose start# 停止容器,但不会删除容器
docker‑compose stop
七、实操总结
- 小型微服务项目(MySQL、Redis、Oatpp‑C++后端)优先使用docker‑compose一键编排;
- 容器之间禁止硬编码IP地址,直接填写yml内的service服务名称进行访问;
- 数据卷挂载实现MySQL数据持久化,容器销毁数据不会丢失;
- 日常运维启停优先使用
up -d后台启动、stop停止容器。
