 Docker Compose :容器编排工具推荐
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/10/15, 09:50:43
