基础环境

  • Linux 或 Windows 系统
  • 已安装 Docker 和 Docker Compose

Docker Compose 配置文件

以下是 docker-compose.yml 配置文件,将所有挂载的数据卷映射到与 Compose 文件同级的 data 目录下,方便集中管理和迁移数据。

docker-compose.yml

# 指定 Docker Compose 文件格式版本
version: '3'

# 定义服务列表
services:
  # WordPress 服务配置
  wordpress:
    # 使用最新版 WordPress 镜像
    image: wordpress:latest
    # 容器名称
    container_name: wordpress
    # 设置容器自动重启策略
    restart: always
    # 端口映射,将主机的 80 端口映射到容器的 80 端口
    ports:
      - "80:80"
    # 环境变量设置,用于 WordPress 连接数据库
    environment:
      # 数据库主机名
      WORDPRESS_DB_HOST: mysql
      # 数据库名称
      WORDPRESS_DB_NAME: wordpress
      # 数据库用户名
      WORDPRESS_DB_USER: admin
      # 数据库密码
      WORDPRESS_DB_PASSWORD: admin_password
    # 数据卷挂载,将 WordPress 数据保存到本地
    volumes:
      - ./data/wordpress:/var/www/html
    # 依赖关系,确保 MySQL 先启动
    depends_on:
      - mysql
    # 连接到指定网络
    networks:
      - wordpress-net

  # MySQL 数据库服务配置
  mysql:
    # 使用 MySQL 5.7 版本镜像(与 WordPress 兼容性最好)
    image: mysql:5.7
    # 容器名称
    container_name: mysql
    # 设置容器自动重启策略
    restart: always
    # 端口映射,将主机的 3306 端口映射到容器的 3306 端口
    ports:
      - "3306:3306"
    # 环境变量设置,用于初始化 MySQL
    environment:
      # 要创建的数据库名称
      MYSQL_DATABASE: wordpress
      # 创建的普通用户名
      MYSQL_USER: admin
      # 普通用户密码
      MYSQL_PASSWORD: admin_password
      # root 用户密码
      MYSQL_ROOT_PASSWORD: root_password
    # 数据卷挂载,将 MySQL 数据保存到本地
    volumes:
      - ./data/mysql:/var/lib/mysql
    # 连接到指定网络
    networks:
      - wordpress-net

  # phpMyAdmin 服务配置,用于管理 MySQL 数据库
  phpmyadmin:
    # 使用 phpMyAdmin 官方镜像
    image: phpmyadmin/phpmyadmin
    # 容器名称
    container_name: phpmyadmin
    # 设置容器自动重启策略
    restart: always
    # 端口映射,将主机的 8080 端口映射到容器的 80 端口
    ports:
      - "8080:80"
    # 环境变量设置
    environment:
      # 指定要连接的 MySQL 主机
      PMA_HOST: mysql
      # MySQL root 用户密码
      MYSQL_ROOT_PASSWORD: root_password
    # 依赖关系,确保 MySQL 先启动
    depends_on:
      - mysql
    # 连接到指定网络
    networks:
      - wordpress-net

  # Redis 缓存服务配置,用于提升 WordPress 性能
  redis:
    # 使用 Redis Alpine 版本镜像(体积小、性能好)
    image: redis:alpine
    # 容器名称
    container_name: redis
    # 设置容器自动重启策略
    restart: always
    # 连接到指定网络
    networks:
      - wordpress-net

# 定义网络配置
networks:
  # 自定义网络名称
  wordpress-net:
    # 网络驱动类型为桥接模式
    driver: bridge

配置说明

数据目录本地化

  • WordPress 数据目录:./data/wordpress
  • MySQL 数据目录:./data/mysql

这些目录会自动在与 docker-compose.yml 同级的 data 文件夹下生成。

主要优化点

  1. 使用 MySQL 5.7 版本,与 WordPress 兼容性最好
  2. 添加了 restart: always 确保容器自动重启
  3. 添加了 depends_on 确保数据库先启动
  4. 增强了密码安全性
  5. 网络隔离,提高安全性

目录结构

运行后,项目目录结构将如下:

your-project/
├── docker-compose.yml
└── data/
    ├── wordpress/     # WordPress 核心文件、插件、主题等
    └── mysql/         # MySQL 数据库文件

部署步骤

1. 创建本地数据目录(可选)

Docker 会自动创建目录,但建议先手动创建并设置权限(避免权限问题):

mkdir -p data\wordpress data\mysql

Linux/macOS 用户可能需要赋予写入权限:

chmod -R 755 ./data

2. 启动服务

docker-compose up -d

3. 验证部署

  • 访问 http://localhost 查看 WordPress 站点
  • WordPress 数据目录:./data/wordpress 会填充 WordPress 的核心文件
  • MySQL 数据目录:./data/mysql 会存储 MySQL 的数据库文件

数据备份与迁移

简易备份

直接复制整个 data 文件夹即可完成数据迁移或备份。

数据库备份

对于更安全的备份,可以使用 MySQL 导出命令:

docker exec mysql mysqldump -u root -proot_password wordpress > backup.sql

数据库恢复

docker exec -i mysql mysql -u root -proot_password wordpress < backup.sql

常见问题与解决方案

权限问题

如果遇到权限错误,可能需要调整目录权限:

Windows 用户需确保 Docker Desktop 已启用”文件共享”(Settings → Resources → File Sharing)。

Linux/macOS 用户可执行:

sudo chown -R 999:999 ./data/mysql

端口冲突

如果宿主机已有服务占用 80 或 3306 端口,需修改 ports 配置,例如:

ports:
  - "8080:80"  # 将主机的8080端口映射到容器的80端口

安全建议

  1. 密码安全:生产环境中应使用更强的随机密码
  2. 健康检查:考虑添加 WordPress 和 MySQL 的健康检查
  3. HTTPS 支持:可以添加 Nginx 作为反向代理,提供 HTTPS 支持
  4. 定期备份:设置定时任务,定期备份数据库和文件
  5. 更新维护:定期更新 WordPress 和插件,保持系统安全