Docker Compose实践
ProjectDaedalus
共 3230字,需浏览 7分钟
·
2021-10-01 15:25
Docker Compose可以大大方便我们对多容器服务的管理,实现了一条命令启动多个容器服务
基本实践
如果期望通过docker run命令启动两个容器,则分别需要如下两条命令。如下所示
# 创建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文件
# 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命令
# 创建启动容器, -d选项表示以后台方式运行容器
docker-compose up -d
效果如下所示
从下图可以看到,我们通过docker-compose.yml文件所创建的两个容器已经启动成功
其中在docker-compose.yml这里我们还自定义了一个名为dev_net的网络,然后各容器服务使用该网络并分配一个固定IP。以便于进行容器间的内部通信
Note
docker compose的大多数命令需在docker-compose.yml文件所在目录下执行
参考文献
第一本Docker书·修订版 James Turnbull著 深入浅出Docker [英]Nigel Poulton著
评论