快速参考
-
由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
Docker 社区 -
哪里可以获得帮助:
Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow
支持的标签及各自的 Dockerfile 链接
-
6.6.2-php8.1-fpm-alpine,6.6-php8.1-fpm-alpine,6-php8.1-fpm-alpine,php8.1-fpm-alpine -
6.6.2-fpm,6.6-fpm,6-fpm,fpm,6.6.2-php8.2-fpm,6.6-php8.2-fpm,6-php8.2-fpm,php8.2-fpm -
6.6.2-php8.3-fpm-alpine,6.6-php8.3-fpm-alpine,6-php8.3-fpm-alpine,php8.3-fpm-alpine -
cli-2.11.0-php8.1,cli-2.11-php8.1,cli-2-php8.1,cli-php8.1 -
cli-2.11.0,cli-2.11,cli-2,cli,cli-2.11.0-php8.2,cli-2.11-php8.2,cli-2-php8.2,cli-php8.2 -
cli-2.11.0-php8.3,cli-2.11-php8.3,cli-2-php8.3,cli-php8.3
快速参考(续)
-
支持的架构:(更多信息)
amd64,arm32v5,arm32v6,arm32v7,arm64v8,i386,mips64le,ppc64le,riscv64,s390x -
已发布的图像伪影细节:
repo-info repo 的repos/wordpress/目录(历史记录)
(图像元数据、传输大小等) -
图像更新:
官方图像仓库的library/wordpress标签
官方图像存储库的library/wordpress文件(历史记录) -
此描述的来源:
文档库的wordpress/目录(历史记录)
什么是 WordPress?
WordPress 是一个免费的开源博客工具和基于 PHP 和 MySQL 的内容管理系统(CMS),运行在网络托管服务上。其功能包括插件架构和模板系统。截至 2013 年 8 月,在排名前 1000 万的网站中,超过 22.0%的网站使用 WordPress。WordPress 是网络上使用最广泛的博客系统,超过 6000 万个网站在使用。最常用的语言是英语、西班牙语和印度尼西亚语。

如何使用此图像
$ docker run --name some-wordpress --network some-network -d wordpress
以下环境变量也适用于配置您的 WordPress 实例(通过自定义 wp-config.php 实现):
-e WORDPRESS_DB_HOST=...-e WORDPRESS_DB_USER=...-e WORDPRESS_DB_PASSWORD=...-e WORDPRESS_DB_NAME=...-e WORDPRESS_TABLE_PREFIX=...-e WORDPRESS_AUTH_KEY=...,-e WORDPRESS_SECURE_AUTH_KEY=...,-e WORDPRESS_LOGGED_IN_KEY=...,-e WORDPRESS_NONCE_KEY=...,-e WORDPRESS_AUTH_SALT=...,-e WORDPRESS_SECURE_AUTH_SALT=...,-e WORDPRESS_LOGGED_IN_SALT=...,-e WORDPRESS_NONCE_SALT=...(默认情况下为唯一的随机 SHA1 值,但仅在提供其他环境变量配置时)-e WORDPRESS_DEBUG=1(默认为禁用,非空值将在wp-config.php中启用WP_DEBUG)-e WORDPRESS_CONFIG_EXTRA=...(默认为无,该值将在wp-config.php中的eval()函数中进行评估。此变量对于应用此映像默认情况下未提供的额外配置值特别有用,例如WP_ALLOW_MULTISITE;有关更多详细信息,请参阅 docker-library/wordpress#142)
在给定的 MySQL 服务器上, WORDPRESS_DB_NAME 需要已经存在;它不会由 wordpress 容器创建。
如果您希望能够从主机访问实例而无需容器的 IP,可以使用标准端口映射:
$ docker run --name some-wordpress -p 8080:80 -d wordpress
然后,在浏览器中通过 http://localhost:8080 或 http://host-ip:8080 进行访问。
当在反向代理(如负责进行 TLS 终止的 NGINX)后面使用带有 TLS 的 WordPress 时,请确保适当地设置 X-Forwarded-Proto (请参阅上游文档中“通过 SSL 进行管理”中的“使用反向代理”)。不需要其他环境变量或配置(如果指定了上述任何环境变量,此映像会自动将所述的 HTTP_X_FORWARDED_PROTO 代码添加到 wp-config.php )。
如果您的数据库需要 SSL,WordPress 工单 #28625 包含了有关 WordPress 上游对此支持的相关详细信息。作为一种解决方法,可以将“Secure DB Connection”插件解压到 WordPress 目录中,并在 wp-config.php 中添加该插件配置中描述的相应值。
Docker 机密信息
作为通过环境变量传递敏感信息的替代方法,可将 _FILE 附加到先前列出的环境变量上,从而使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 机密中加载密码。例如:
$ docker run --name some-wordpress -e WORDPRESS_DB_PASSWORD_FILE=/run/secrets/mysql-root ... -d wordpress:tag
目前,这对 WORDPRESS_DB_HOST 、 WORDPRESS_DB_USER 、 WORDPRESS_DB_PASSWORD 、 WORDPRESS_DB_NAME 、 WORDPRESS_AUTH_KEY 、 WORDPRESS_SECURE_AUTH_KEY 、 WORDPRESS_LOGGED_IN_KEY 、 WORDPRESS_NONCE_KEY 、 WORDPRESS_AUTH_SALT 、 WORDPRESS_SECURE_AUTH_SALT 、 WORDPRESS_LOGGED_IN_SALT 、 WORDPRESS_NONCE_SALT 、 WORDPRESS_TABLE_PREFIX 和 WORDPRESS_DEBUG 提供支持。
...通过 docker-compose 或 docker stack deploy
示例 docker-compose.yml 用于 wordpress :
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
运行 docker stack deploy -c stack.yml wordpress (或 docker-compose -f stack.yml up ),等待其完全初始化,然后访问 http://swarm-ip:8080 、 http://localhost:8080 或 http://host-ip:8080 (视情况而定)。
添加额外的库/扩展
此图像未提供任何额外的 PHP 扩展或其他库,即使流行的插件需要它们(例如,它无法发送电子邮件)。可能的插件数量无限,并且它们可能需要 PHP 支持的任何扩展。包含现有的每个 PHP 扩展会极大地增加图像大小。
如果您需要其他 PHP 扩展,您需要创建自己的映像 FROM 来替代这个。 php 映像的文档说明了如何编译其他扩展。此外,针对 wordpress 的较旧的 Dockerfile 有一个这样做的简化示例,而同一个 Dockerfile 的较新版本则有一个更全面的示例。
包含预安装的主题/插件
将包含您的主题或插件的卷挂载到适当的目录;然后通过“wp-admin”用户界面应用它们。确保为用户设置读/写/执行权限:
- 主题放置在
/var/www/html/wp-content/themes/中的子目录中 - 插件放在
/var/www/html/wp-content/plugins/中的一个子目录中
如果您希望在图像中提供要在多个安装中部署的其他内容,请将其放置在 /usr/src/wordpress/ 下的相同目录中(在容器首次启动时会将其复制到 /var/www/html/ )。
静态图像 / 通过重新部署进行更新
此图像的默认配置与官方 WordPress 默认配置相匹配,其中自动更新已启用(因此初始安装来自图像,但此后它在 /var/www/html/ 数据卷内变为自我管理)。
如果您希望进行更静态的部署(类似于其他容器化应用程序),并部署新容器以更新 WordPress + 主题/插件,那么您可能需要使用如下内容(并以只读方式运行生成的映像):
FROM wordpress:apache
WORKDIR /usr/src/wordpress
RUN set -eux; \
find /etc/apache2 -name '*.conf' -type f -exec sed -ri -e "s!/var/www/html!$PWD!g" -e "s!Directory /var/www/!Directory $PWD!g" '{}' +; \
cp -s wp-config-docker.php wp-config.php
COPY custom-theme/ ./wp-content/themes/custom-theme/
COPY custom-plugin/ ./wp-content/plugins/custom-plugin/
对于基于 FPM 的图像,删除 find 指令,并将您的反向代理中的 SCRIPT_FILENAME 路径从 /var/www/html 调整到 /usr/src/wordpress 。
以只读方式运行结果,为 /tmp 、 /run 和(可选地) wp-content/uploads 提供可写存储:
$ docker run ... \
--read-only \
--tmpfs /tmp \
--tmpfs /run \
--mount type=...,src=...,dst=/usr/src/wordpress/wp-content/uploads \
... \
--env WORDPRESS_DB_HOST=... \
--env WORDPRESS_AUTH_KEY=... \
--env ... \
custom-wordpress:tag
注意:务必定期重建和重新部署,以确保您获得所有最新的 WordPress 安全更新。
以任意用户身份运行
请参阅 php 图像文档中“以任意用户身份运行”部分。
当通过此图像的 cli 变体运行 WP-CLI 时,需要注意的是,它们基于 Alpine,并且具有 Alpine 的 www-data 的默认 USER ,其 UID 为 82 (与基于 Debian 的 WordPress 变体相比,其默认有效 UID 为 33 ),因此当针对现有的基于 Debian 的 WordPress 安装运行 wordpress:cli 时,可能需要类似于 --user 33:33 的操作(可能还需要类似于 -e HOME=/tmp 的操作,具体取决于调用的 wp 命令以及它是否尝试使用 ~/.wp-cli )。有关此问题的更多讨论,请参阅 docker-library/wordpress#256 。
配置 PHP 指令
查看 php 图像文档的“配置”部分。
例如,要调整像 upload_max_filesize 这样的常见 php.ini 标志,您可以创建一个具有所需参数的 custom.ini 并将其放置在 $PHP_INI_DIR/conf.d/ 目录中:
FROM wordpress:tag
COPY custom.ini $PHP_INI_DIR/conf.d/
图像变体
wordpress 图像有多种类型,每种都针对特定的用例而设计。
wordpress:<version>
这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。
wordpress:<version>-fpm
此变体包含 PHP-FPM,它是 PHP 的一种 FastCGI 实现。有关 PHP-FPM 的更多信息,请访问 PHP-FPM 网站。
为了使用此图像变体,将需要某种反向代理(例如 NGINX、Apache 或其他支持 FastCGI 协议的工具)。
一些潜在的有用资源:
- PHP-FPM.org (该文本为英文缩写或特定名称,在中文中可能没有完全对应的专用词汇,所以直接保留原文)
- 由 @md5 提供的简化示例
- 非常详细的帕斯卡尔·兰多(Pascal Landau)所著文章
- Stack Overflow 讨论
- Apache httpd 维基示例
警告:FastCGI 协议本质上是信任的,因此在私有容器网络之外暴露是极其不安全的——除非您确切知道自己在做什么(并且愿意承担极大的风险),否则不要将 Docker 的 --publish ( -p )标志与此图像变体一起使用。
wordpress:cli
此图像变体本身不包含 WordPress,而是包含 WP-CLI 。
使用现有的 WordPress 容器来运用它的最简单方法类似于以下内容:
$ docker run -it --rm \
--volumes-from some-wordpress \
--network container:some-wordpress \
-e WORDPRESS_DB_USER=... \
-e WORDPRESS_DB_PASSWORD=... \
# [and other used environment variables]
wordpress:cli user list
一般来说,为了让 WP-CLI 与 WordPress 安装进行交互,它需要访问 WordPress 安装的磁盘文件,以及访问数据库(实现这一点且不需要进行 wp-config.php 更改的最简单方法是简单地加入现有且可能正常工作的 WordPress 容器的网络上下文,但还有许多其他方法可以实现这一点,这将作为读者的练习留给读者)。
注意:自 2021 年 3 月起,WordPress 图像使用自定义的 wp-config.php ,该自定义直接从上述定义的环境变量中提取值(请参阅 docker-library/wordpress#572 和 docker-library/wordpress#577 中的 wp-config-docker.php )。由于直接读取环境变量,cli 容器也需要相同的一组环境变量来正确评估 wp-config.php 。
许可证
查看此映像中所包含软件的许可证信息。
与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。
一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 wordpress/ 目录中找到。
对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。
