Docker Compose实践

Docker Compose可以大大方便我们对多容器服务的管理,实现了一条命令启动多个容器服务

abstract.png

基本实践

如果期望通过docker run命令启动两个容器,则分别需要如下两条命令。如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建mysql容器
docker run -d \
--name MySQL-Service \
-p 7000:3306 \
-v mysqlData:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=db1 \
mysql:5.7

# 创建redis容器
docker run -d \
--name Redis-Service \
-p 7001:6379 \
-v /Users/zgh/Docker/Redis/Redis-Service/Data:/var/lib/data \
redis:6.2.3-alpine3.13 \
redis-server --requirepass 123456

而通过compose我们就可以统一管理多个容器。具体地,通过docker-compose.yml文件配置所需的多个容器服务。然后利用docker-compose命令从YAML配置文件创建并启动所有服务。下面即是一个配置mysql、redis的docker-compose.yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Compose 版本
version: '3.8'

# 定义Docker服务
services:

# Docker服务 1
MySQL-Service:
image: mysql:5.7
container_name: MySQL-Service
ports:
- "7000:3306"
volumes:
- mysqlData:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: db1
networks:
# 使用名为dev_net并设置容器IP
dev_net:
ipv4_address: 120.120.120.13

# Docker服务 2
Redis-Service:
image: redis:6.2.3-alpine3.13
container_name: Redis-Service
command: redis-server --requirepass 123456
ports:
- "7001:6379"
volumes:
- /Users/zgh/Docker/Redis/Redis-Service/Data:/var/lib/data
networks:
# 使用名为dev_net并设置容器IP
dev_net:
ipv4_address: 120.120.120.14

# 定义数据卷
volumes:
mysqlData:

# 定义网络
networks:
# 定义一个名为dev_net的网络
dev_net:
ipam:
config:
# 设置网段
- subnet: 120.120.120.0/24

然后进入docker-compose.yml文件所在目录执行docker-compose命令

1
2
# 创建启动容器, -d选项表示以后台方式运行容器
docker-compose up -d

效果如下所示

figure 1.jpg

从下图可以看到,我们通过docker-compose.yml文件所创建的两个容器已经启动成功

figure 2.jpg

其中在docker-compose.yml这里我们还自定义了一个名为dev_net的网络,然后各容器服务使用该网络并分配一个固定IP。以便于进行容器间的内部通信

Note

  • docker compose的大多数命令需在docker-compose.yml文件所在目录下执行

figure 3.jpg

参考文献

  1. 第一本Docker书·修订版 James Turnbull著
  2. 深入浅出Docker [英]Nigel Poulton著
0%