Docker Compose :容器编排工具
1. Docker Compose 简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过使用 YAML 文件配置应用程序的服务,可以使用单个命令创建和启动所有服务。它大大简化了容器化应用的部署和管理过程。
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
2. 为什么需要 Docker Compose?
在实际开发中,一个应用往往由多个服务组成。例如:
- Web 应用服务器
- 数据库服务
- 缓存服务
- 消息队列
- 前端服务
手动管理这些容器是非常繁琐的。Docker Compose 提供了一种优雅的方式来管理这些服务,实现了:
- 服务配置的版本控制
- 环境变量管理
- 服务依赖关系处理
- 网络和数据卷配置的统一管理
5. docker-compose.yml 详解
5.1 基本结构
yaml
version : '3.8'
services:
easyai-nacos:
container_name: easyai-nacos
image: nacos/nacos-server
build:
context: ./nacos
environment:
- MODE=standalone
volumes:
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
depends_on:
- easyai-mysql5.2 常用配置项说明
5.21 version
yaml
version: '3.8'- 指定
docker-compose文件的语法版本为 3.8,适用于 Docker 19.03+ 版本。 - 影响
docker-compose支持的功能,如depends_on、volumes、healthcheck等。
5.22 services
yaml
services:
easyai-nacos:services定义多个容器服务,easyai-nacos是其中之一。easyai-nacos作为 Nacos 注册中心服务。
5.23 container_name
yaml
container_name: easyai-nacos- 设置容器名称为
easyai-nacos。 - 若不指定,则 Docker 会随机生成一个名称。
5.24 image
yaml
image: nacos/nacos-server- 指定使用
nacos/nacos-server官方 Nacos 镜像。 - 若
build存在,则image会被忽略。
5.25 build
yaml
build:
context: ./nacos- 构建自定义 Nacos 镜像:
context: ./nacos指定Dockerfile目录,即./nacos/Dockerfile。- 若
nacos目录下有Dockerfile,则docker-compose不会拉取官方镜像,而是本地构建。
build与image关系:- 同时存在时,
build优先,image仅用于docker tag结果。 - 若无
build,则直接拉取image指定的镜像。
- 同时存在时,
5.26 environment
yaml
environment:
- MODE=standalone设置环境变量,传递给容器:
MODE=standalone让 Nacos 以单机模式运行,而不是集群模式。
5.27 volumes
yaml
volumes:
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties- 数据持久化,将宿主机目录映射到容器内部:
- Nacos 的日志存放到宿主机
./nacos/logs/,防止容器销毁后丢失日志。 - 覆盖 Nacos 配置文件,允许使用自定义
application.properties。
5.28 ports
yaml
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"端口映射:宿主机端口:容器端口
格式:
8848:8848→ Nacos 控制台(http://localhost:8848/nacos)。9848:9848→ gRPC 端口,用于集群间通信(单机模式无用)。9849:9849→ gRPC over TLS 端口。
5.29 depends_on
yaml
depends_on:
- easyai-mysql定义容器间的依赖关系:
- 确保
easyai-mysql先启动,再启动easyai-nacos。 - 注意:
depends_on仅控制启动顺序,不保证easyai-mysql完全就绪。- 可能 Nacos 仍然需要等待 MySQL 启动完成 才能连接数据库。
- 可以使用
healthcheck确保数据库完全启动后再运行 Nacos。
depends_on 与 links 的区别
depends_on仅控制启动顺序,不创建容器间的网络连接:
yaml
depends_on:
- easyai-redis
- easyai-mysqleasyai-nacos 在 easyai-redis 和 easyai-mysql 启动后才会启动。
5.30 links
提供额外的网络可见性,但已被 networks取代:
yaml
links:
- easyai-redis
- easyai-mysql使 easyai-nacos能通过容器名称直接访问easyai-redis和 easyai-mysql如:
bash
mysql -h easyai-mysql -u root -plinks适用于旧版docker-compose,但networks更推荐。
depends_on vs. links 总结
| 特性 | depends_on | links |
|---|---|---|
| 控制启动顺序 | ✅ 是 | ❌ 否 |
| 影响网络通信 | ❌ 否 | ✅ 是 |
| 推荐使用 | ✅ 是 | ❌ 否(已被 networks 取代) |
6.下载安装
- 使用
curl下载官方docker-compose
bash
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose- 赋予执行权限
bash
sudo chmod +x /usr/local/bin/docker-compose- 验证安装
bash
docker-compose --version7. Docker Compose 常用命令
7.1 基本操作
bash
# 启动所有服务
docker-compose up
# 后台运行
docker-compose up -d
# 停止服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
# 进入服务容器
docker-compose exec service_name bash6.2 服务生命周期管理
bash
# 构建服务
docker-compose build
# 重启服务
docker-compose restart
# 暂停服务
docker-compose pause
# 恢复服务
docker-compose unpause
# 删除服务(包括数据卷)
docker-compose down -v8. 总结
Docker Compose 是一个强大的工具,它简化了多容器应用的管理和部署。通过合理使用 Docker Compose,可以:
- 标准化开发环境
- 简化部署流程
- 提高开发效率
- 实现基础设施即代码
掌握 Docker Compose 对于现代应用开发和部署来说是必不可少的技能。通过持续学习和实践,你可以更好地利用这个工具来优化你的开发工作流程。


评论区
欢迎分享你的思考、补充或问题。