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 配置并挂载证书目录,不用改动其他服务。

分享到:
上一篇
Docker容器日志驱动配置,限制日志文件大小
下一篇
KVM虚拟机桥接网络,虚拟机获取独立公网IP
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意