Docker Compose實(shí)踐
Docker Compose可以大大方便我們對(duì)多容器服務(wù)的管理,實(shí)現(xiàn)了一條命令啟動(dòng)多個(gè)容器服務(wù)

基本實(shí)踐
如果期望通過(guò)docker run命令啟動(dòng)兩個(gè)容器,則分別需要如下兩條命令。如下所示
# 創(chuàng)建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
# 創(chuàng)建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
而通過(guò)compose我們就可以統(tǒng)一管理多個(gè)容器。具體地,通過(guò)docker-compose.yml文件配置所需的多個(gè)容器服務(wù)。然后利用docker-compose命令從YAML配置文件創(chuàng)建并啟動(dòng)所有服務(wù)。下面即是一個(gè)配置mysql、redis的docker-compose.yml文件
# Compose 版本
version: '3.8'
# 定義Docker服務(wù)
services:
# Docker服務(wù) 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并設(shè)置容器IP
dev_net:
ipv4_address: 120.120.120.13
# Docker服務(wù) 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并設(shè)置容器IP
dev_net:
ipv4_address: 120.120.120.14
# 定義數(shù)據(jù)卷
volumes:
mysqlData:
# 定義網(wǎng)絡(luò)
networks:
# 定義一個(gè)名為dev_net的網(wǎng)絡(luò)
dev_net:
ipam:
config:
# 設(shè)置網(wǎng)段
- subnet: 120.120.120.0/24
然后進(jìn)入docker-compose.yml文件所在目錄執(zhí)行docker-compose命令
# 創(chuàng)建啟動(dòng)容器, -d選項(xiàng)表示以后臺(tái)方式運(yùn)行容器
docker-compose up -d
效果如下所示

從下圖可以看到,我們通過(guò)docker-compose.yml文件所創(chuàng)建的兩個(gè)容器已經(jīng)啟動(dòng)成功

其中在docker-compose.yml這里我們還自定義了一個(gè)名為dev_net的網(wǎng)絡(luò),然后各容器服務(wù)使用該網(wǎng)絡(luò)并分配一個(gè)固定IP。以便于進(jìn)行容器間的內(nèi)部通信
Note
docker compose的大多數(shù)命令需在docker-compose.yml文件所在目錄下執(zhí)行

參考文獻(xiàn)
第一本Docker書(shū)·修訂版 James Turnbull著 深入淺出Docker [英]Nigel Poulton著
評(píng)論
圖片
表情
