- 示例工程
【免费下载链接】awesome-compose
Awesome Docker Compose samples
本篇技术指南基于 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 downdocker compose down会移除容器与默认网络,但保留db_data与wp_data两个命名卷,因此你的 WordPress 数据库、主题与插件数据依然存在,下次up -d后站点数据完整恢复。
停止并删除全部数据
$ docker compose down --volumesdocker 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
相关推荐
gpt-researcher Docker 快速部署指南:docker-compose 与 Docker CLI 完整实战
gpt researcher Docker 快速部署指南:docker compose 与 Docker CLI 完整实战 本文围绕 gpt researche
人工智能AI 应用深度研究AI Agent自主智能体RAG多智能体后端biliTickerBuy Docker 部署实战:从 docker run 到 docker compose 的完整配置指南
biliTickerBuy Docker 部署实战:从 docker run 到 docker compose 的完整配置指南 本文围绕 biliTickerB
电商RPAPicoClaw Docker 部署与快速上手指南:Compose 三种模式与配置详解
PicoClaw Docker 部署与快速上手指南:Compose 三种模式与配置详解 本文基于仓库文档 docs/guides/docker.pt br.md
人工智能AI 应用AI Agent交互助手工具调用MCP ClientsAgent 记忆
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考