Docker Compose可以大大方便我们对多容器服务的管理,实现了一条命令启动多个容器服务
基本实践
如果期望通过docker run命令启动两个容器,则分别需要如下两条命令。如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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
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
| version: '3.8'
services:
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: ipv4_address: 120.120.120.13
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: ipv4_address: 120.120.120.14
volumes: mysqlData:
networks: dev_net: ipam: config: - subnet: 120.120.120.0/24
|
然后进入docker-compose.yml文件所在目录执行docker-compose命令
效果如下所示
从下图可以看到,我们通过docker-compose.yml文件所创建的两个容器已经启动成功
其中在docker-compose.yml这里我们还自定义了一个名为dev_net的网络,然后各容器服务使用该网络并分配一个固定IP。以便于进行容器间的内部通信
Note
- docker compose的大多数命令需在docker-compose.yml文件所在目录下执行
参考文献
- 第一本Docker书·修订版 James Turnbull著
- 深入浅出Docker [英]Nigel Poulton著