拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docker Compose 快速部署 WordPress:compose 配置详解与完整实战流程

Docker Compose 快速部署 WordPress:compose 配置详解与完整实战流程
  • 示例工程

【免费下载链接】awesome-compose

Awesome Docker Compose samples

项目地址:https://gitcode.com/gh_mirrors/aw/awesome-compose
点击查看免费下载

本篇技术指南基于 awesome-compose 仓库的官方文档示例(official-documentation-samples/wordpress/README.md),完整讲解如何用 Docker Compose 在隔离的容器环境中一键拉起 WordPress 博客与独立数据库实例。你将掌握docker-compose.yml的逐项配置含义、数据持久化卷的用法、docker compose up -d/down的完整生命周期操作,以及部署后如何完成 WordPress 著名的"五分钟安装",最终得到一个可复用、可运行的 WordPress 起步项目。

前置条件

开始之前,请确认本机已经安装好 Docker Compose。本指南假定 Compose 已可用,后续所有命令均在项目目录内执行。

定义项目:目录结构与 compose 文件

1. 创建空的项目目录

首先创建一个空的目录作为项目根目录,例如my_wordpress。该目录同时是应用镜像的构建上下文,目录内只应放置与该镜像构建相关的资源。

$ mkdir my_wordpress $ cd my_wordpress/

提示:Compose 文件名使用.yml或.yaml扩展名均可正常工作。官方文档示例使用docker-compose.yml,本仓库内的示例则统一采用compose.yaml,两种命名都是 Compose 规范认可的。

2. 编写docker-compose.yml

在项目目录中创建docker-compose.yml,内容定义了WordPress博客服务与一个独立的MySQL/MariaDB数据库服务,并通过命名卷(named volume)实现数据持久化。官方文档给出的完整起步配置如下:

services: db: # We use a mariadb image which supports both amd64 & arm64 architecture image: mariadb:10.6.4-focal # If you really want to use MySQL, uncomment the following line #image: mysql:8.0.27 command: '--default-authentication-plugin=mysql_native_password' volumes: - db_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD=somewordpress - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress expose: - 3306 - 33060 wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - 80:80 restart: always environment: - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress volumes: db_data: wp_data:

这份文件是"自包含"的起步项目:不依赖外部构建上下文,直接拉取镜像即可运行。下面逐段拆解每一部分的作用。

compose 配置逐项拆解

db 服务:数据库容器

db: image: mariadb:10.6.4-focal command: '--default-authentication-plugin=mysql_native_password' volumes: - db_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD=somewordpress - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress expose: - 3306 - 33060
配置项说明
image: mariadb:10.6.4-focal使用 MariaDB 镜像而非 MySQL,原因是该镜像同时支持 amd64 与 arm64 两种 CPU 架构,能保证在 Apple Silicon 等 ARM 主机上顺利运行。如果你确实想用 MySQL,可取消#image: mysql:8.0.27一行的注释切换
command: '--default-authentication-plugin=mysql_native_password'指定默认认证插件为mysql_native_password,用于兼容 WordPress 客户端与数据库之间的认证握手(旧版认证协议)
volumes: - db_data:/var/lib/mysql将命名卷db_data挂载到容器内数据库数据目录/var/lib/mysql,实现数据库文件的持久化
restart: always容器异常退出或 Docker 守护进程重启后自动拉起,保证服务可用性
environment:容器首次启动时自动完成数据库初始化:创建名为wordpress的数据库,以及用户wordpress(密码wordpress),同时设置 root 密码somewordpress
expose: - 3306 - 33060仅将端口暴露给 Compose 内部网络,不映射到宿主机端口,外部无法直接访问数据库

wordpress 服务:博客容器

wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - 80:80 restart: always environment: - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress
配置项说明
image: wordpress:latest使用官方 WordPress 镜像的最新标签
volumes: - wp_data:/var/www/html将命名卷wp_data挂载到 WordPress 的 Web 根目录/var/www/html。该卷持久化 WordPress 对数据库的更新、已安装的主题与插件,以及上传的媒体文件
ports: - 80:80将容器内 80 端口映射到宿主机 80 端口,浏览器通过宿主机地址直接访问站点
environment:通过WORDPRESS_DB_*系列环境变量向 WordPress 告知数据库连接信息:WORDPRESS_DB_HOST=db指向同一 Compose 网络内的db服务名(Compose 内置 DNS 会解析该服务名),用户名、密码、库名均与db服务中MYSQL_*创建的值一一对应

命名卷声明

volumes: db_data: wp_data:

两个命名卷db_data与wp_data在顶层显式声明。docker compose down默认会保留它们,从而在容器重建后依然保留数据库与站点文件;只有显式删除卷(--volumes/-v)才会清空数据。

注意:WordPress Multisite(多站点)仅在端口80和443上工作。如果你把ports中的宿主机端口改成其他值,多站点功能将无法正常工作。

构建并启动项目

在项目目录中执行以下命令启动整套环境:

$ docker compose up -d

-d(detached)表示后台运行。该命令会完成三件事:拉取所需的 Docker 镜像、创建默认网络与命名卷、启动 wordpress 与数据库两个容器。实际执行时输出大致如下:

$ docker compose up -d Creating network "my_wordpress_default" with the default driver Pulling db (mysql:5.7)... 5.7: Pulling from library/mysql efd26ecc9548: Pull complete a3ed95caeb02: Pull complete <...> Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de Status: Downloaded newer image for mysql:5.7 Pulling wordpress (wordpress:latest)... latest: Pulling from library/wordpress efd26ecc9548: Already exists a3ed95caeb02: Pull complete 589a9d9a7c64: Pull complete <...> Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6 Status: Downloaded newer image for wordpress:latest Creating my_wordpress_db_1 Creating my_wordpress_wordpress_1

注意:如果报错信息显示无法绑定0.0.0.0到端口80或443,通常说明该端口已被其他服务占用。Multisite 只能在 80/443 端口运行,因此遇到端口冲突时需要先释放相应端口,而不是随意修改映射。

验证容器与端口映射

启动完成后,可用docker ps核对容器状态与端口映射。本仓库的 wordpress-mysql/README.md 给出了对应的验证示例:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5fbb4181a069 wordpress:latest "docker-entrypoint.s…" 35 seconds ago Up 34 seconds 0.0.0.0:80->80/tcp wordpress-mysql_wordpress_1 e0884a8d444d mysql:8.0.19 "docker-entrypoint.s…" 35 seconds ago Up 34 seconds 3306/tcp, 33060/tcp wordpress-mysql_db_1

可以看到 WordPress 容器将宿主机 80 端口映射到容器内 80 端口,而数据库容器仅以内部端口形式暴露(3306/tcp, 33060/tcp,无0.0.0.0:...->映射),外部网络无法直接触达数据库——这正是expose与ports两种声明方式的效果差异。

在浏览器中完成 WordPress 安装

启动后,WordPress 会运行在 Docker 主机的80端口上。若使用 Docker Desktop for Mac / Windows,可直接访问http://localhost:80打开站点。

注意:容器刚启动时站点并非立即可用,首次初始化可能需等待一两分钟,请耐心等待第一个页面加载完成。

首次访问会进入 WordPress 自带的"五分钟安装"向导。第一步是选择安装语言:

选定语言并点击 Continue 后,进入站点信息设置页面,需要填写站点标题、管理员用户名、密码与邮箱,并可选择是否允许搜索引擎索引站点:

填写完毕后点击 Install WordPress,即可完成安装并以管理员身份登录后台。此时数据库连接信息已由WORDPRESS_DB_*环境变量自动配置好,安装过程无需手动填写数据库参数。

关闭与清理

停止并保留数据

$ docker compose down

docker compose down会移除容器与默认网络,但保留db_data与wp_data两个命名卷,因此你的 WordPress 数据库、主题与插件数据依然存在,下次up -d后站点数据完整恢复。

停止并删除全部数据

$ docker compose down --volumes

docker compose down --volumes除移除容器与默认网络外,还会删除 WordPress 数据库(即删除命名卷中的数据)。本仓库的 wordpress-mysql/README.md 使用等价的-v参数:

$ docker compose down -v

需要彻底重置环境时使用该命令。

深入参考:仓库内的 WordPress 生产化示例

官方文档示例末尾指向了本仓库中更完整的实战样本 wordpress-mysql/README.md,其对应的 compose.yaml 与本文配置在核心思路上完全一致,可作为继续深入的参照:

  • 架构兼容性:为兼容 AMD64 与 ARM64 两种架构,仓库示例默认使用mariadb:10.6.4-focal;如需使用 MySQL,取消注释#image: mysql:8.0.27即可,与官方文档示例的策略完全相同;
  • 数据持久化:db_data卷挂载于/var/lib/mysql持久化数据库文件,保证down后数据不丢失;
  • 生命周期:docker compose up -d部署、docker compose down停止、docker compose down -v连带删除全部 WordPress 数据。

仓库中还包含其他 Compose 快速上手样本可作横向参考:官方文档示例目录 official-documentation-samples/README.md 收录了 Django(django/README.md)与 Rails(rails/README.md)两个同系列快速入门,分别演示 Compose 编排 PostgreSQL 后端应用的完整套路,有助于理解"应用服务 + 数据服务"这一 Compose 通用编排模式。

小结

通过本文的docker-compose.yml,你已能用一条docker compose up -d命令获得一套完整的 WordPress 站点:mariadb容器承载数据库并借助命名卷持久化数据,wordpress容器承载站点文件并映射 80 端口对外服务;down保留数据、down --volumes彻底清理。这套配置既是官方文档推荐的起步模板,也与仓库内 wordpress-mysql/compose.yaml 的生产化样本保持一致,可直接复制到自己的项目中使用。

  • 示例工程

【免费下载链接】awesome-compose

Awesome Docker Compose samples

项目地址:https://gitcode.com/gh_mirrors/aw/awesome-compose
点击查看免费下载
上一篇:IoT-For-Beginners 实战:用继电器与 MQTT 构建响应土壤湿度的自动植物浇水系统
下一篇:Polar 前端性能优化:规避 Barrel 文件导入,砍掉 React/Next.js 数百毫秒模块加载与冷启动开销

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表