一、实验目标
使用 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
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
三、容器启动脚本(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 概述
五、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 参数映射对照表
5.3 关键参数详解
1. restart 重启策略
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 语法规范
正确示例
services:
web:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
environment:
NGINX_HOST: example.com
NGINX_PORT: "80"
八、核心要点速查