这里以 WordPress 为例,我们不用官方的镜像,而是用 php 镜像

php 官方有个自带 apache 的版本,如:php:8.1.32-apache, 建议用这个版本,这个版本不用考虑 Nginx 和 php 的文件共享问题,启动容器:

1
2
3
4
docker run --rm -d --name php-test \
-v ./app:/var/www/html \
-p 8080:80 \
php:8.1.32-apache

自定义 php 配置文件

比如调整 PHP 上传文件大小限制

docker run 的时候挂载 php.ini

1
2
3
docker run ... \
-v ./php.ini:/usr/local/etc/php/conf.d/php.ini \
...

php.ini 增加

1
upload_max_filesize = 1024M

安装 Core 扩展

image.png
这个时候说明 php 正常工作了,但是缺扩展。

1
2
3
FROM php:8.1.32-apache
RUN docker-php-ext-configure mysqli \
&& docker-php-ext-install mysqli

安装其他扩展

image.png|604

比如安装 imagick,整合到 dockerfile 里构建个新的镜像。imagick 使用 pecl 安装

1
2
3
4
5
FROM php:8.1.32-apache
RUN apt-get update \
&& apt-get install -y libmagickwand-dev \
&& pecl install imagick \
&& docker-php-ext-enable imagick

安装自定义 PHP 扩展

比如安装主题的时候需要安装主题文件提供的扩展:
image.png|509

查看 php 扩展目录

1
php -i | grep "extension_dir"

把这个目录挂载出来,将扩展文件放进去。或者挂载一个新的目录

1
2
3
docker run ... \
-v ./extensions:/extensions \
...

然后 php.ini 中指定扩展路径

1
extension=/extensions/swoole_loader_81_nts.so

WordPress 常见警告

post_max_size 的值小于 upload_max_filesize

image.png

这个问题需要配置一下 php.ini

1
2
upload_max_filesize = 200M
post_max_size = 320M

反向代理问题

WordPress 经过 Nginx 反向代理后,可能会出现页面样式丢失的问题,查看浏览器 F12 发现一堆 404, 原因为 WordPress 自身也带跳转,解决方法可以看:Nginx反向代理wordpress并启用https