在Docker容器化运维中,当需要部署多容器交互的应用时,手动执行docker run命令逐个启动容器、配置网络和挂载目录,不仅繁琐易错,还难以维护容器间的依赖关系。Docker Compose作为Docker官方的容器编排工具,可通过一个YAML配置文件,定义多容器应用的服务、网络、数据卷等信息,实现"一键部署、一键启停、统一维护",大幅提升部署效率。
本文将通过两个高频实战案例,从脚本编写、部署操作、维护管理三个维度,详细讲解Docker Compose的使用方法,覆盖"简单双容器应用(WordPress)"和"复杂三容器应用(Prometheus监控)",适配CentOS、银河麒麟V10等Linux系统,新手也能直接复刻实操。
一、Docker Compose核心优势(前置认知)
-
统一配置:所有容器的启动参数、网络、数据卷都集中在一个docker-compose.yml文件中,便于版本管理和迁移;
-
一键操作:通过单条命令实现多容器的启动、停止、重启、删除,无需逐个操作容器;
-
依赖管理:可配置容器启动顺序,解决多容器间的依赖问题(如先启动数据库,再启动应用);
-
网络自动配置:自动创建自定义网络,容器间可通过服务名直接通信,无需手动配置网络。
前提:已安装Docker和Docker Compose(安装命令可直接复制执行):
# 安装Docker(CentOS7/8通用)
yum install docker -y
systemctl start docker
systemctl enable docker
# 安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
二、实战案例一:Docker Compose一键部署WordPress博客系统
WordPress是基于PHP开发的开源博客系统,依赖MySQL数据库存储数据,属于典型的"应用+数据库"双容器架构。本案例使用华为云国内镜像,实现WordPress的一键部署、数据持久化和外网访问。
1. 编写docker-compose.yml配置脚本
创建部署目录,编写配置文件(脚本可直接复制,无需修改核心参数):
version: '3'
services:
# MySQL数据库服务
wp-mysql:
image: swr.cn-north-1.myhuaweicloud.com/iivey/mysql:8.0.23 # 国内镜像,下载速度快
restart: unless-stopped # 容器异常自动重启,保障服务可用性
ports:
- "3306:3306" # 端口映射:宿主机3306 → 容器3306(可根据需求修改宿主机端口)
volumes:
- /etc/localtime:/etc/localtime # 同步宿主机时区
- /dockerdata/wp/db:/var/lib/mysql # 数据持久化:挂载MySQL数据到宿主机
environment:
- MYSQL_DATABASE=wordpress # 自动创建wordpress数据库
- MYSQL_USER=wordpress # 自动创建wordpress数据库用户
- MYSQL_PASSWORD=wordpress123 # 数据库用户密码
- MYSQL_ROOT_PASSWORD=root123 # MySQL root用户密码
command:
- mysqld
- --default-authentication-plugin=mysql_native_password # 兼容MySQL8.0密码认证
- --character-set-server=utf8 # 设置字符集为utf8
- --collation-server=utf8_bin
networks:
- wp_net # 加入自定义网络wp_net
# WordPress应用服务
wordpress:
image: swr.cn-north-1.myhuaweicloud.com/iivey/wordpress:latest # 包含Apache+PHP环境
restart: unless-stopped
ports:
- "80:80" # 端口映射:宿主机80端口(外网可直接访问)
volumes:
- /etc/localtime:/etc/localtime # 同步时区
- /dockerdata/wp/www:/var/www/html # 持久化WordPress程序文件
networks:
- wp_net # 与MySQL容器同网络,可通过服务名通信
# 自定义桥接网络(容器间通信)
networks:
wp_net:
driver: bridge
2. 一键部署WordPress环境
执行以下命令,完成部署(全程无需手动干预):
# 1. 创建部署目录(规范存储配置文件和数据)
mkdir -p /data/wp
# 2. 将编写好的docker-compose.yml文件复制到部署目录
cp docker-compose.yml /data/wp
# 3. 进入部署目录,启动服务
cd /data/wp
docker-compose up -d
关键说明:
-
docker-compose up -d:后台启动所有容器,自动创建wp_net网络和挂载目录;
-
首次启动会自动拉取镜像,耐心等待(国内镜像约1-3分钟);
-
查看容器启动状态:
docker-compose ps,若两个容器STATUS均为"Up",则部署成功。
启动成功示例:
[root@localhost wp]# docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
wp-wordpress-1 swr.cn-north-1.myhuaweicloud.com/iivey/wordpress:latest "docker-entrypoint.s..." wordpress 12 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp
wp-wp-mysql-1 swr.cn-north-1.myhuaweicloud.com/iivey/mysql:8.0.23 "docker-entrypoint.s..." wp-mysql 12 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
3. Docker Compose常用维护命令
部署完成后,可通过以下命令管理容器服务,无需逐个操作容器:
# 1. 查看容器内进程状态
docker-compose top
# 2. 查看所有容器运行日志(排查报错)
docker-compose logs
# 3. 查看指定容器日志(如MySQL容器)
docker-compose logs wp-mysql
# 4. 暂时停止所有容器(不删除容器和数据)
docker-compose stop
# 5. 重启所有容器
docker-compose restart
# 6. 停止并删除所有容器、网络(保留数据卷)
docker-compose down
# 7. 停止并删除所有容器、网络、数据卷(彻底清理)
docker-compose down -v
4. WordPress初始化配置(关键步骤)
容器启动正常后,通过浏览器访问WordPress,完成初始化配置:
-
访问地址:
http://宿主机IP(无需加端口,默认80端口),进入语言选择界面:
-
选择"简体中文",点击"继续",进入数据库信息准备界面:
-
点击"现在就开始",进入数据库连接配置界面(参数与docker-compose.yml中一致):
-
数据库名:wordpress(与MYSQL_DATABASE一致);
-
用户名:wordpress(与MYSQL_USER一致);
-
密码:wordpress123(与MYSQL_PASSWORD一致);
-
数据库主机:wp-mysql(重点!填写MySQL容器服务名,而非IP,容器间通过服务名通信);
-
表前缀:默认wp_(无需修改)。
-
-
点击"提交",完成数据库连接,后续按提示设置站点名称、管理员账号密码,即可完成WordPress初始化,正常使用博客系统。
三、实战案例二:Docker Compose一键部署Prometheus监控平台
Prometheus是开源的监控系统,常用于服务器、容器、应用的指标采集和分析,通常需要配合node-exporter(指标采集)和Grafana(可视化面板)使用,属于"三容器交互"的复杂应用。本案例使用Prometheus官方镜像,实现监控平台的一键部署。
1. 编写docker-compose.yml配置脚本
创建部署目录,编写配置文件(包含node-exporter、prometheus、grafana三个服务):
version: '3.8' # 兼容更多Docker特性,推荐使用
services:
# 1. node-exporter:采集宿主机系统指标(CPU、内存、磁盘等)
node-exporter:
image: prom/node-exporter:v1.9.1 # 官方镜像,稳定可靠
container_name: node-exporter # 自定义容器名,便于管理
ports:
- "9100:9100" # 指标采集端口
volumes:
- /etc/localtime:/etc/localtime:ro # 同步时区,只读模式
- /proc:/host/proc:ro # 挂载宿主机proc目录,采集系统进程信息
- /sys:/host/sys:ro # 挂载宿主机sys目录,采集系统硬件信息
networks:
- prom_net
command:
- --path.procfs=/host/proc # 指定procfs路径
- --path.sysfs=/host/sys # 指定sysfs路径
# 2. Prometheus:核心监控服务,存储和分析指标数据
prometheus:
image: prom/prometheus:v2.53.4
container_name: prometheus
ports:
- "9090:9090" # Web UI端口,用于查看监控指标
volumes:
- /data/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml # 挂载自定义配置文件
- prometheusdata:/prometheus # 命名卷,持久化监控数据
networks:
- prom_net
# 3. Grafana:可视化面板,展示监控数据(图表化展示)
grafana:
image: grafana/grafana:12.0.1
container_name: grafana
ports:
- "3000:3000" # Grafana Web UI端口
volumes:
- grafana:/var/lib/grafana # 命名卷,持久化Grafana配置和面板数据
networks:
- prom_net
# 自定义网络:三个服务同网络,实现相互通信
networks:
prom_net:
driver: bridge
# 命名卷:持久化数据,容器删除后数据不丢失
volumes:
prometheusdata:
grafana:
2. 配置Prometheus采集规则(关键)
Prometheus需要通过配置文件指定采集目标(如node-exporter的指标),创建配置文件prometheus.yml:
# 创建配置文件目录
mkdir -p /data/prometheus/conf
# 编写配置文件
cat /data/prometheus/conf/prometheus.yml
global:
scrape_interval: 15s # 指标采集间隔(15秒一次)
evaluation_interval: 15s # 告警检测间隔(15秒一次)
scrape_configs:
# 采集Prometheus自身的监控指标
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# 采集node-exporter的宿主机指标
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"] # 填写node-exporter服务名,无需IP
3. 一键部署Prometheus监控平台
执行以下命令,完成部署:
# 1. 创建部署目录
mkdir -p /data/prometheus
# 2. 将docker-compose.yml复制到部署目录
cp docker-compose.yml /data/prometheus
# 3. 进入部署目录,启动服务
cd /data/prometheus
docker-compose up -d
部署完成后,查看容器状态:docker-compose ps,确保三个容器均为"Up"状态,即可访问各服务。
4. 访问监控平台
- Prometheus Web UI:
http://宿主机IP:9090,可查看指标采集情况、执行查询语句;

- Grafana Web UI:
http://宿主机IP:3000,默认账号密码:admin/admin(首次登录需修改密码);

- node-exporter指标:
http://宿主机IP:9100/metrics,可查看采集到的宿主机系统指标。

补充:Grafana配置Prometheus数据源(简单步骤):
-
登录Grafana,点击左侧"齿轮"图标(Configuration),选择"Data Sources";
-
点击"Add data source",选择"Prometheus";
-
在URL中填写:
http://prometheus:9090(Prometheus服务名),点击"Save & Test",提示"Data source is working"即配置成功; -
导入官方Node Exporter仪表板(ID:1860),即可查看宿主机CPU、内存、磁盘等指标的图表化展示。

四、核心注意事项(避坑指南)
-
镜像选择:优先使用国内镜像(如华为云、阿里云),避免官方镜像下载缓慢;
-
容器通信:同网络内的容器,通过服务名通信(而非IP),IP会随容器重启变化;
-
数据持久化:必须挂载数据卷(宿主机目录或命名卷),否则容器删除后数据丢失;
-
端口冲突:部署前检查宿主机端口是否被占用(如80、3306、9090),避免端口冲突导致部署失败;
-
时区同步:所有容器挂载
/etc/localtime,确保容器时间与宿主机一致,避免日志、监控数据时间错乱。
五、总结
本文通过两个实战案例,讲解了Docker Compose在不同复杂度应用中的使用方法:从简单的双容器WordPress博客系统,到复杂的三容器Prometheus监控平台,核心都是通过docker-compose.yml统一配置,实现"一键部署、统一维护"。
Docker Compose的核心价值的是"简化多容器编排",尤其适用于开发环境、测试环境和中小型生产环境,能够大幅减少运维成本,避免手动操作的失误。掌握本文的两个案例,可轻松应对大部分多容器应用的部署需求,后续可扩展到Docker Compose编排LNMP、Zabbix等更复杂的应用。