使用docker部署php项目,核心是构建包含应用代码和依赖的镜像,并通过nginx等web服务器反向代理到php-fpm容器。选择php:8.5-fpm镜像时,建议优先选用带有具体标签的版本(如php:8.5-fpm-alpine),以减小体积并提高安全性;若需特定扩展,可基于官方镜像编写dockerfile进行定制。

如何构建包含自定义扩展的PHP-FPM镜像?
通过编写Dockerfile,在基础镜像上安装所需扩展(如pdo_mysql、gd)并配置环境变量,即可构建出符合项目需求的定制化镜像。此方法确保环境一致性,避免“在我机器上能跑”的问题。

Dockerfile
FROM php:8.5-fpm-alpine
RUN apk add --no-cache \
libpng-dev libjpeg-dev freetype-dev \
&& docker-php-ext-install pdo_mysql gd \
&& rm -rf /var/cache/apk/*
COPY . /var/www/html
WORKDIR /var/www/html
CMD ["php-fpm"]
上述Dockerfile基于alpine版本,安装了pdo_mysql和gd扩展,并将当前目录复制到容器内。构建命令为docker build -t my-php-app .,运行后容器将启动PHP-FPM服务。
Nginx如何与PHP-FPM容器通信?
Nginx容器通过内部网络解析PHP-FPM容器的IP地址或主机名,将.php请求转发至9000端口。需在Nginx配置中设置fastcgi_pass指令指向PHP-FPM服务地址,并传递必要的FastCGI参数。

nginx.conf
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php;
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
该Nginx配置将.php请求转发给名为php-fpm的容器(即PHP-FPM服务的Docker服务名),端口为9000。配合docker-compose.yml中的服务定义,可实现自动DNS解析。
php:8.5-fpm-alpine与php:8.5-fpm有何区别?
php:8.5-fpm-alpine基于Alpine Linux,体积小、攻击面少,但使用musl libc,部分C扩展可能不兼容;php:8.5-fpm基于Debian/Ubuntu,库丰富、兼容性好,但镜像较大。生产环境推荐alpine版,除非依赖特定glibc库。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











