导航菜单

Docker 部署 WordPress 与 Docker Compose 编排总结

陆兴东 2026-06-04 88 浏览 Docker

一、实验目标

使用 Docker 快速部署一个 WordPress 博客站点(也可选用 Halo 替代),底层依赖:

  • PHP 运行环境:Apache/Nginx
  • MySQL 数据库

二、手动部署(docker run)

2.1 部署 MySQL 数据库容器

docker run -d --name wordpress-db \
  -v /etc/localtime:/etc/localtime:ro \
  -v /data/mysql:/data \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_DATABASE=wordpress \
  docker.m.daocloud.io/library/mysql:8.0
参数
说明
-e MYSQL_ROOT_PASSWORD=root
设置数据库 root 密码
-e MYSQL_DATABASE=wordpress
启动时自动创建 wordpress 数据库
-v /data/mysql:/data
数据持久化挂载(宿主机:容器)
-v /etc/localtime:/etc/localtime:ro
时间同步,只读挂载

2.2 部署 WordPress(Apache 版)

docker run -d --name wordpress \
  -p 80:80 \
  --link wordpress-db:wordpress-db \
  -e WORDPRESS_DB_HOST=wordpress-db:3306 \
  -e WORDPRESS_DB_USER=root \
  -e WORDPRESS_DB_PASSWORD=root \
  -e WORDPRESS_DB_NAME=wordpress \
  -v /etc/localtime:/etc/localtime:ro \
  -v /data/mysql:/data \
  wordpress:6-apache
环境变量
说明
WORDPRESS_DB_HOST=wordpress-db:3306
数据库连接地址(容器名:端口)
WORDPRESS_DB_USER=root
数据库登录用户
WORDPRESS_DB_PASSWORD=root
数据库登录密码
WORDPRESS_DB_NAME=wordpress
目标数据库名
--link wordpress-db:wordpress-db
建立容器间网络连接(将数据库容器别名映射到 WordPress 容器内)

三、容器启动脚本(Bash)

工作建议:生产环境中不建议直接用命令行 run,时间一久会遗忘参数。应通过脚本或编排工具(K8s/Docker Compose)记录。

#!/bin/bash

start_wordpress(){
    docker run -d --name wordpress-db \
      -v /etc/localtime:/etc/localtime:ro \
      -v /data/mysql:/data \
      -p 3306:3306 \
      -e MYSQL_ROOT_PASSWORD=root \
      -e MYSQL_DATABASE=wordpress \
      docker.m.daocloud.io/library/mysql:8.0

    docker run -d --name wordpress \
      -p 80:80 \
      --link wordpress-db:wordpress-db \
      -e WORDPRESS_DB_HOST=wordpress-db:3306 \
      -e WORDPRESS_DB_USER=root \
      -e WORDPRESS_DB_PASSWORD=root \
      -e WORDPRESS_DB_NAME=wordpress \
      -v /etc/localtime:/etc/localtime:ro \
      -v /data/mysql:/data \
      wordpress:6-apache
}

stop_wordpress(){
    docker rm -f wordpress-db
    docker rm -f wordpress
}

case $1 in
    start)
        start_wordpress
        ;;
    stop)
        stop_wordpress
        ;;
esac

四、Docker Compose 概述

项目
说明
本质
Python/Go 编写的编排脚本,新版已集成到 Docker 内部
核心功能
通过一个声明式文件编排多容器应用
编排文件
docker-compose.yaml 或 docker-compose.yml
与 Docker 关系
最新版 Docker 已内置 compose 和 swarm 功能
命令变更
新版使用 docker compose; 旧版使用 docker-compose

五、docker-compose.yml 结构详解

文件分为 三部分:

version: '3'      # 1. 版本声明
services:         # 2. 服务定义(核心)
  ...             # 3. 各容器配置

5.1 完整示例(WordPress + MySQL)

version: '3'
services:
  wordpress-db:
    container_name: mysql
    image: mysql:8.0
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /data/mysql:/data
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "wordpress"
    ports:
      - "3306:3306"

  wordpress:
    container_name: wordpress
    image: wordpress:6-apache
    ports:
      - "80:80"
    links:
      - wordpress-db:wordpress-db
    environment:
      WORDPRESS_DB_USER: "root"
      WORDPRESS_DB_PASSWORD: "root"
      WORDPRESS_DB_HOST: "wordpress-db:3306"
      WORDPRESS_DB_NAME: "wordpress"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - wordpress-db
    restart: unless-stopped

5.2 参数映射对照表

docker run 参数
docker-compose 参数
说明
--name
container_name
容器名称
镜像名
image
使用的镜像
-v
volumes
数据卷挂载(数组格式,每项前加 -)
-e
environment
环境变量(支持 KEY: VALUE 或 - KEY=VALUE)
-p
ports
端口映射(数组格式)
--link
links
容器链接
--net host
network_mode: host
网络模式(默认 bridge)
--dns
dns
DNS 服务器列表
命令覆盖
command
覆盖镜像默认启动指令
-
depends_on
服务依赖关系(控制启动顺序)
-
restart
容器重启策略

5.3 关键参数详解

1. restart 重启策略

策略值
行为
unless-stopped
手动停止不重启,异常退出后自动重启(推荐)
always
无论何种原因停止,总是自动重启
no
不重启(默认)
on-failure
仅在退出码非 0 时重启

2. depends_on 依赖控制

depends_on:
  - wordpress-db
  • 作用:定义服务启动顺序。当解析到 wordpress 服务时,若发现依赖 wordpress-db,会先启动数据库,再启动 WordPress。
  • 注意:仅控制启动顺序,不保证数据库已就绪才启动下游服务。

3. links 容器互联

links:
  - wordpress-db:wordpress-db
  • 将目标容器的网络别名注入到当前容器的 /etc/hosts,实现容器间通过名称通信。

4. command 指令覆盖

command:
  - "sleep 3600"
  - "/bin/bash"
  • 覆盖镜像默认的 ENTRYPOINT 或 CMD,常用于调试。

六、Docker Compose 使用流程

# 1. 创建项目目录
mkdir wordpress && cd wordpress

# 2. 编写编排文件
vim docker-compose.yaml

# 3. 启动所有服务(后台运行)
docker compose up -d

# 4. 指定非默认文件名启动
docker compose -f xxx.yaml up -d

# 5. 停止并删除所有容器、网络
docker compose down

七、YAML 语法规范

规则
说明
缩进表示层级
严格使用空格缩进,禁止使用 Tab
- 表示数组
列表项以 - 开头,如 volumes: 下的多个挂载
键值对格式
同一层级的键值对必须对齐,只使用缩进区分父子关系
字符串引号
字符串值建议加引号,避免特殊字符解析错误

正确示例

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    environment:
      NGINX_HOST: example.com
      NGINX_PORT: "80"

八、核心要点速查

要点
内容
部署方式演进
手工命令 → Bash 脚本 → Docker Compose → Kubernetes
持久化必备
数据库必须挂载数据卷,否则容器删除数据丢失
时间同步
建议挂载 /etc/localtime:/etc/localtime:ro 保持宿主机与容器时间一致
网络通信
容器间通过 --link 或自定义网络使用容器名作为主机名访问
密码安全
生产环境避免在命令行明文写密码,应使用 Secret 或环境变量文件
编排优势
docker-compose.yaml 一份文件即可完整描述应用拓扑,便于版本管理和团队协作