基于 Docker Compose 的 WordPress 博客系统部署
项目背景
为了学习 Docker 容器编排、Nginx 反向代理以及 MySQL 数据持久化等运维基础技术,我搭建了一个基于 Docker Compose 的 WordPress 博客系统。
项目目标:
学习 Docker Compose 多容器编排
学习 Nginx 反向代理
学习 Docker 网络通信
学习 MySQL 数据持久化
学习基础故障排查与日志分析
项目架构
1 | 浏览器 |
技术栈
| 技术 | 用途 |
|---|---|
| Docker | 容器运行环境 |
| Docker Compose | 多容器编排 |
| Nginx | 反向代理 |
| WordPress | 博客系统 |
| MySQL 5.7 | 数据库存储 |
| CentOS 7.9 | 操作系统 |
环境信息
| 项目 | 版本 |
|---|---|
| 操作系统 | CentOS 7.9 |
| Docker | 26.1.4 |
| Docker Compose | v2.27.1 |
虚拟机 IP:
1 | 192.168.1.60 |
项目目录结构
1 | blog-project/ |
Docker Compose 编排
核心服务:
MySQL
WordPress
Nginx
通过 Docker Compose 统一编排与管理。
MySQL
负责数据存储,并通过 Volume 实现数据持久化:
1 | volumes: |
即使容器删除,数据库数据仍然保留。
WordPress
WordPress 通过 Docker 内部网络连接 MySQL:
1 | WORDPRESS_DB_HOST: mysql:3306 |
Docker Compose 会自动创建内部 DNS,实现:
1 | mysql |
Nginx 反向代理
通过 Nginx 对外提供统一访问入口:
1 | location / { |
用户访问流程:
1 | 浏览器 |
WordPress 不再直接暴露公网端口。
项目启动
进入项目目录:
1 | cd /opt/blog-project |
启动项目:
1 | docker compose up -d |
查看容器状态:
1 | docker ps |
访问网站:
1 | http://192.168.1.60 |
故障排查实践
Docker 镜像拉取失败
问题现象:
1 | docker login 超时 |
排查过程:
发现 Docker daemon 继承了历史代理配置:
1 | systemctl show --property=Environment docker |
输出:
1 | HTTP_PROXY=http://192.168.1.33:10808/ |
由于该虚拟机为克隆环境,历史代理 IP 已失效。
解决方案:
删除 Docker systemd 代理配置:
1 | rm -f /etc/systemd/system/docker.service.d/http-proxy.conf |
重新加载并重启 Docker:
1 | systemctl daemon-reload |
问题恢复。
WordPress 数据库连接故障
模拟 MySQL 容器异常:
1 | docker stop blog-mysql |
浏览器报错:
1 | Error establishing a database connection |
日志分析:
Nginx 返回:
1 | 500 Internal Server Error |
WordPress 无法连接 MySQL。
恢复方法:
1 | docker start blog-mysql |
网站恢复正常。
项目收获
通过该项目,学习并实践了:
Docker Compose 多容器编排
Docker Bridge 网络通信
Docker Volume 数据持久化
Nginx 反向代理
Web 请求链路分析
容器日志查看与故障排查
MySQL 基础运维
同时对 Web 服务架构:
1 | Nginx |
有了更深入理解。