Docker compose多容器编排搭建CMS全套环境
想用 Docker Compose 把 CMS 跑起来,最直接的办法是用一个 docker-compose.yml 同时定义 Nginx、MySQL、PHP 和 CMS 程序四个服务,让它们通过网络互联,数据落到本地目录。
下面这套流程在常见 Linux 服务器上验证过,零基础也能跟着做。
先确认服务器和目录准备
开始前需要一台能联网的 Linux 服务器(Ubuntu 或 CentOS 都行),内存建议不低于 2GB。
用 SSH 登录后,先检查 Docker 和 Compose 是否可用:
docker --version
docker compose version
如果没安装,可以参考 Docker 官方文档安装。
接着创建一个项目目录,所有配置和数据都放进去:
mkdir -p /opt/cms-docker && cd /opt/cms-docker
mkdir -p nginx/conf.d mysql/data wordpress
这样做的目的是把配置、数据库文件和 CMS 程序分开存放,以后备份或迁移只需要打包整个目录。
编写 docker-compose.yml 编排四个服务
在 /opt/cms-docker 下新建 docker-compose.yml,内容如下:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: cms-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wp123456
volumes:
- ./mysql/data:/var/lib/mysql
networks:
- cms-net
wordpress:
image: wordpress:php8.2-fpm
container_name: cms-wordpress
restart: always
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wp123456
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wordpress:/var/www/html
depends_on:
- mysql
networks:
- cms-net
nginx:
image: nginx:1.25
container_name: cms-nginx
restart: always
ports:
- "80:80"
volumes:
- ./wordpress:/var/www/html
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- wordpress
networks:
- cms-net
networks:
cms-net:
driver: bridge
这里把 MySQL 作为独立数据服务,WordPress 只负责 PHP 处理,Nginx 负责对外提供 Web 访问。
所有服务通过 cms-net 内部网络通信,只有 Nginx 暴露 80 端口,安全边界更清晰。
配置 Nginx 转发 PHP 请求
在 nginx/conf.d 下新建 cms.conf,让 Nginx 把 .php 请求交给 WordPress 容器处理:
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
注意 fastcgi_pass 写的是 wordpress:9000,因为容器之间可以用服务名互相访问,不需要写 IP。
保存后就可以启动整套环境了。
启动容器并完成 CMS 安装
回到项目目录,执行:
docker compose up -d
第一次启动会拉取镜像,耐心等待。
用下面命令查看状态,四个服务都应为 running:
docker compose ps
然后在浏览器访问服务器 IP,应该会看到 WordPress 安装界面。
数据库信息按 docker-compose.yml 里的填写:数据库名 wordpress,用户名 wpuser,密码 wp123456,主机填 mysql。
安装完成后,后台地址通常是 http://你的IP/wp-admin。
如果页面显示数据库连接错误,优先检查 MySQL 容器是否正常启动,以及 WordPress 容器里的环境变量是否和数据库配置一致。
避坑与日常维护要点
- 端口冲突:如果服务器上已有 Nginx 或 Apache 占用 80 端口,
cms-nginx会启动失败。可以先停掉宿主机 Web 服务,或把映射改成"8080:80"。 - 目录权限:WordPress 容器默认以
www-data用户运行,挂载的./wordpress目录建议给足读写权限,否则上传主题或插件可能失败。 - 数据持久化:数据库文件在
./mysql/data,CMS 程序在./wordpress,删除容器不会丢数据,但不要随意删除这两个目录。 - 镜像版本:示例中的镜像标签只作为演示,生产环境建议固定到具体小版本,并以 Docker Hub 官方页面实际可用标签为准。
验证整套环境是否正常
执行以下命令,确认容器之间网络连通:
docker compose exec nginx ping -c 2 wordpress
docker compose exec wordpress ping -c 2 mysql
能收到回复说明内部网络正常。
再访问站点首页和后台,能正常登录、发布文章,就表示 Docker Compose 多容器编排搭建 CMS 全套环境已经完成。
日常更新时,用 docker compose pull 拉取新镜像,再 docker compose up -d 重建容器即可,数据不会丢失。
如果后续需要换域名或加 HTTPS,只需调整 Nginx 配置并挂载证书目录,不用改动其他服务。