使用Docker搭建PHP运行环境是当下流行的开发实践,它能够有效隔离项目依赖,避免本地环境冲突,同时实现开发环境的快速迁移与复用。通过容器化技术,开发者可以在不同机器上获得一致的运行表现,极大提升了协作效率。

环境准备与镜像获取策略
在开始配置PHP环境之前,首先需要确保本地系统已经正确安装了Docker引擎。Docker的安装过程因操作系统而异,但安装完成后,可以通过终端执行简单的命令来验证安装状态。这一步骤是后续所有操作的基础,确保Docker守护进程能够正常响应指令。
验证Docker安装是否成功,可以在命令行中输入版本检查命令。如果终端输出了类似版本号和构建信息,则说明Docker已经准备就绪。接下来,我们需要从Docker Hub获取官方维护的PHP镜像。官方镜像提供了多种变体,开发者可以根据实际需求选择CLI版本或FPM版本。CLI版本适用于纯命令行脚本运行,而FPM版本则专为配合Web服务器处理动态请求而设计。以当下主流的PHP 8.2版本为例,我们可以拉取对应的镜像到本地。
# 验证Docker安装状态 docker --version # 输出 Docker version 24.0.6, build ed223bc 表示安装成功 # 拉取PHP 8.2的CLI版本镜像 # 若需配合Nginx或Apache使用,可拉取 php:8.2-fpm docker pull php:8.2-cli # 查看本地已拉取的镜像列表 docker images | grep php
容器创建与目录挂载机制
获取镜像后,下一步是创建并运行容器。Docker提供了docker run命令来实例化镜像并启动容器。在这个过程中,合理的参数配置至关重要。通过后台运行参数可以让容器在后台持续提供服务,通过--name参数可以为容器指定一个易于记忆的名称,方便后续管理。
在Web开发中,代码的同步与持久化是核心需求。利用-v参数可以将宿主机的项目目录挂载到容器内部,这样在宿主机修改代码后,容器内能够实时生效,无需重新构建镜像。同时,如果使用的是FPM版本,还需要通过-p参数将容器的9000端口映射到宿主机,以便外部Web服务器能够与之通信。
# 创建并启动PHP CLI容器 # -d: 后台运行 # --name: 指定容器名称为 php_env # -v: 挂载本地目录到容器,实现代码同步 # -p: 映射端口,FPM版本常用 docker run -d --name php_env -v $(pwd)/php_project:/var/www/html -p 9000:9000 php:8.2-cli # 若使用FPM版本,拉取 php:8.2-fpm 后运行命令如下 docker run -d --name php_fpm -v $(pwd)/php_project:/var/www/html -p 9000:9000 php:8.2-fpm
PHP扩展安装与依赖管理
官方PHP镜像为了保证体积小巧,默认仅安装了核心扩展,许多业务开发中常用的扩展需要手动安装。我们可以通过docker exec命令进入运行中的容器内部,像操作普通Linux系统一样进行扩展的安装。Docker官方镜像内置了docker-php-ext-install等辅助脚本,简化了扩展编译安装的过程。
部分扩展依赖于底层的系统库,例如gd扩展需要图像处理库,curl扩展需要网络请求库。因此在安装这类PHP扩展之前,必须先使用系统的包管理工具安装对应的依赖库。安装完依赖后,再使用辅助脚本配置并编译PHP扩展,最后退出容器并重启使其生效。
# 进入运行中的PHP容器内部 docker exec -it php_env /bin/bash # 更新系统软件源 apt-get update # 安装 pdo_mysql 扩展 docker-php-ext-install pdo_mysql # 安装 gd 扩展,需先安装系统依赖 apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev docker-php-ext-configure gd --with-freetype --with-jpeg docker-php-ext-install gd # 安装 curl 扩展,需先安装系统依赖 apt-get install -y libcurl4-openssl-dev docker-php-ext-install curl # 退出容器 exit # 重启容器使新安装的扩展生效 docker restart php_env
环境验证与Web服务器集成
为了确认PHP环境及扩展安装是否正确,我们需要编写一个简单的测试脚本进行验证。在本地挂载的php_project目录下创建一个PHP文件,通过输出当前PHP版本和已加载的扩展列表,可以直观地检查环境状态。对于CLI版本的容器,可以直接通过docker exec命令在容器内执行该脚本。
<?php
// 输出当前PHP版本信息
echo "当前PHP版本:" . phpversion() . "<br/>";
// 打印已安装的扩展列表
echo "已安装扩展:" . implode(", ", get_loaded_extensions());
?>
# 在CLI容器中执行PHP脚本验证环境 docker exec php_env php /var/www/html/index.php
在实际生产或复杂开发场景中,PHP-FPM通常需要与Nginx配合使用。此时,Nginx负责接收HTTP请求并将动态请求转发给PHP-FPM处理。我们需要配置Nginx,将以.php结尾的请求通过FastCGI协议转发到PHP容器的9000端口。在Nginx配置文件中,fastcgi_pass指令指向PHP容器的名称或地址,同时正确设置SCRIPT_FILENAME参数,确保Nginx能够找到对应的PHP文件。
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location ~ .php$ {
fastcgi_pass php_fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
容器生命周期管理与编排工具应用
在日常开发维护中,熟练掌握容器管理命令能够提高工作效率。通过docker ps可以查看当前正在运行的容器,添加-a参数则可以查看所有包括已停止的容器。当需要暂停服务时使用docker stop,恢复服务使用docker start。如果容器不再需要,可以先停止再使用docker rm删除。排查问题时,docker logs命令能够查看容器内部输出的日志信息。
当项目涉及多个服务(如PHP、Nginx、数据库等)时,手动使用docker run管理会变得繁琐且易错。Docker Compose作为官方提供的多容器编排工具,允许我们使用一个YAML文件来定义和运行所有服务。在docker-compose.yml文件中,我们可以声明各个服务的镜像、端口映射、目录挂载以及依赖关系,然后通过一条命令启动整个应用栈。
version: '3'
services:
php:
image: php:8.2-fpm
container_name: php_env
volumes:
- ./php_project:/var/www/html
ports:
- "9000:9000"
nginx:
image: nginx:latest
container_name: nginx_env
volumes:
- ./php_project:/var/www/html
- ./nginx_conf:/etc/nginx/conf.d
ports:
- "80:80"
depends_on:
- php
# 在 docker-compose.yml 所在目录执行命令,一键启动所有服务 docker-compose up -d
通过Docker Compose,整个环境配置变成了代码化文件,团队成员只需共享配置文件即可在本地快速构建完全一致的开发环境。这种方式不仅降低了沟通成本,也为后续的持续集成与部署打下了良好基础。掌握Docker在PHP开发中的应用,是迈向现代化工程实践的重要一步。
DockerPHP容器配置php_docker修改时间:2026-07-14 17:48:31