Docker Compose 一键部署 WordPress:从零开始搭建个人博客
前言
传统部署 WordPress 需要手动安装 Nginx/Apache、PHP、MySQL,配置各种参数,踩坑不断。而 Docker Compose 只需要一个配置文件,一条命令就能完成部署,环境隔离、数据持久化、一键启停,体验完全不同。
本文记录使用 Docker Compose 部署 WordPress + MySQL 的完整过程,包含踩坑点和运维技巧。
为什么用 Docker Compose 部署 WordPress
| 对比项 | 传统方式 | Docker Compose |
|---|---|---|
| 环境搭建 | 手动装 Nginx + PHP + MySQL,配置复杂 | 一个 yml 文件搞定 |
| 环境隔离 | 容易污染系统环境 | 容器隔离,互不影响 |
| 迁移部署 | 需要重新搭建 | 复制文件,一条命令启动 |
| 版本管理 | 手动升级,可能出兼容问题 | 改镜像版本号即可 |
| 数据备份 | 需要分别备份 MySQL 和文件 | Docker 卷统一管理 |
环境准备
操作系统:Linux(本文使用 openEuler/CentOS 均可)
需要安装:
- Docker
- Docker Compose
# 安装 Docker
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
# 验证
docker --version
docker-compose --version
项目结构
docker-wordpress/
├── docker-compose.yml # 核心部署配置
├── .env.example # 环境变量模板
└── .gitignore # Git 忽略规则
核心配置详解
完整 docker-compose.yml:
services:
db:
image: mysql:8.0
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-somewordpress}
- MYSQL_DATABASE=${MYSQL_DATABASE:-wordpress}
- MYSQL_USER=${MYSQL_USER:-wordpress}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:-wordpress}
healthcheck:
test: ["CMD","mysqladmin","ping","-h","localhost"]
interval: 10s
timeout: 5s
retries: 5
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST:-db}
- WORDPRESS_DB_USER=${WORDPRESS_DB_USER:-wordpress}
- WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD:-wordpress}
- WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME:-wordpress}
depends_on:
db:
condition: service_healthy
volumes:
db_data:
wp_data:
关键配置解释
1. MySQL 认证方式
command: '--default-authentication-plugin=mysql_native_password'
MySQL 8.0 默认使用 caching_sha2_password 认证,WordPress 的 PHP 驱动不支持,必须改为 mysql_native_password,否则连接会报错。
2. 数据持久化
volumes:
- db_data:/var/lib/mysql
- wp_data:/var/www/html
把 MySQL 数据和 WordPress 文件挂载到 Docker 卷,容器删除后数据不丢失。
3. 环境变量 + 默认值
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-somewordpress}
${变量名:-默认值} 语法:优先读 .env 文件中的值,没有就用默认值。这样密码不硬编码在 yml 里,安全性更好。
4. 健康检查(重点!)
healthcheck:
test: ["CMD","mysqladmin","ping","-h","localhost"]
interval: 10s
timeout: 5s
retries: 5
depends_on:
db:
condition: service_healthy
这是踩坑点!没有健康检查时,WordPress 启动时 MySQL 可能还没初始化完成,导致连接失败。加上 healthcheck + condition: service_healthy,WordPress 会等 MySQL 真正可用了才启动。
5. 端口说明
expose:
- 3306 # 容器内部端口,不暴露到宿主机
ports:
- 80:80 # 宿主机 80 端口映射到容器 80 端口
MySQL 只需要容器间访问,用 expose;WordPress 需要外部访问,用 ports。
部署步骤
第一步:创建配置文件
# 创建项目目录
mkdir docker-wordpress && cd docker-wordpress
# 创建 .env 文件(从模板复制)
cp .env.example .env
# 按需修改密码
vim .env
.env.example 内容:
# MySQL 配置
MYSQL_ROOT_PASSWORD=somewordpress
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
# WordPress 配置
WORDPRESS_DB_HOST=db
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress
WORDPRESS_DB_NAME=wordpress
第二步:启动
docker-compose up -d
首次启动会拉取镜像,需要等待。
第三步:查看状态
docker-compose ps
正常输出:
NAME STATUS PORTS
docker-wordpress-db-1 Up (healthy) 3306/tcp, 33060/tcp
docker-wordpress-wordpress-1 Up 0.0.0.0:80->80/tcp
注意 db 容器显示 (healthy) 表示健康检查通过。
第四步:浏览器访问
打开浏览器访问 http://你的服务器IP,进入 WordPress 安装界面:
- 选择语言
- 设置站点标题、管理员账号密码
- 安装完成
踩坑记录
坑1:MySQL 认证方式报错
现象:WordPress 连接数据库时报错 The server requested authentication method unknown to the client
原因:MySQL 8.0 默认使用 caching_sha2_password,WordPress 的 PHP mysql 驱动不支持
解决:在 MySQL 启动命令加 --default-authentication-plugin=mysql_native_password
坑2:WordPress 启动时数据库还没准备好
现象:容器启动后 WordPress 报数据库连接错误
原因:MySQL 容器启动了,但数据库初始化还没完成,WordPress 就开始连接了
解决:使用 healthcheck + depends_on: condition: service_healthy
坑3:数据丢失
现象:docker-compose down 后数据没了
原因:没有配置 volumes 持久化
解决:给 MySQL 和 WordPress 都配置 volumes
常用运维命令
# 查看容器状态
docker-compose ps
# 查看日志(实时跟踪)
docker-compose logs -f
# 查看某个服务的日志
docker-compose logs -f db
docker-compose logs -f wordpress
# 停止服务
docker-compose stop
# 停止并删除容器(数据保留在卷中)
docker-compose down
# 停止并删除容器 + 数据(慎用!)
docker-compose down -v
# 重启
docker-compose restart
# 进入容器
docker exec -it docker-wordpress-db-1 bash
docker exec -it docker-wordpress-wordpress-1 bash
备份与恢复
备份
# 备份 MySQL 数据
docker exec docker-wordpress-db-1 mysqldump -u wordpress -p wordpress > backup.sql
# 备份 WordPress 文件
docker cp docker-wordpress-wordpress-1:/var/www/html ./wp-backup
恢复
# 恢复 MySQL
docker exec -i docker-wordpress-db-1 mysql -u wordpress -p wordpress < backup.sql
# 恢复文件
docker cp ./wp-backup docker-wordpress-wordpress-1:/var/www/html
扩展方向
- 加 Nginx 反向代理:配置域名、HTTPS
- 加 Redis 缓存:提升 WordPress 性能
- 加 phpMyAdmin:Web 管理数据库
- 多站点部署:一个 MySQL 实例跑多个 WordPress
总结
Docker Compose 部署 WordPress 的优势:
- 配置即文档,一个 yml 文件描述整个架构
- 一键启停,运维效率高
- 环境隔离,不污染宿主机
- 数据持久化,安全可靠
最关键的是健康检查配置,解决了 MySQL 初始化时序问题,避免了最常见的踩坑。
项目地址:https://gitee.com/pengjia12345/docker-wordpress
更多推荐




所有评论(0)