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