Docker 安装 PHP(手把手讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言:为什么选择 Docker 安装 PHP?
在现代 Web 开发中,PHP 作为一门经典语言,依然在服务器端编程领域占据重要地位。然而,随着技术栈的复杂化,不同项目对 PHP 版本、扩展和依赖项的要求差异显著,导致环境配置常常成为开发者的“隐形负担”。Docker 的出现,为这一问题提供了优雅的解决方案。
想象一下,Docker 就像一个智能集装箱:你可以将 PHP 运行环境、依赖库和配置文件封装成标准化的“集装箱”,无论在本地开发环境还是生产服务器,只需简单“装载”即可运行。这种一致性不仅减少了环境配置冲突,还让团队协作更加高效。
本篇文章将从零开始,分步骤讲解如何利用 Docker 安装和管理 PHP 环境,适合编程初学者快速上手,也包含中级开发者需要的进阶技巧。
安装 Docker:构建 PHP 的“集装箱”基础
步骤 1:安装 Docker 环境
在开始前,需要先安装 Docker。根据操作系统不同,安装方法略有差异:
Ubuntu 系统
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install docker-ce
macOS 系统
直接通过 Docker Desktop 官网下载安装包,双击即可完成安装。
安装完成后,验证 Docker 是否运行:
docker --version
docker run hello-world
步骤 2:理解 Dockerfile 的作用
Dockerfile 是 Docker 容器的“建造蓝图”,通过文本指令定义环境配置。我们可以将其比作乐高积木:每一行指令都是一个预制模块,最终组合成完整的 PHP 运行环境。
编写第一个 Dockerfile:构建 PHP 环境
基础镜像选择
PHP 官方提供了多种 Docker 镜像,常见的包括: | 镜像名称 | 特点 | 适用场景 | |-------------------|--------------------------|-----------------------| | php:8.1-apache | 内置 Apache 服务器 | 需要 Web 服务器环境 | | php:8.1-fpm | FastCGI 进程管理器 | 与 Nginx 等反向代理搭配 | | php:8.1-cli | 命令行接口 | 脚本执行、单元测试 |
以构建一个简单的 PHP-FPM 环境为例,创建项目目录并初始化 Dockerfile:
mkdir my-php-app && cd my-php-app
touch Dockerfile
Dockerfile 内容解析
FROM php:8.1-fpm
WORKDIR /var/www/html
COPY . /var/www/html
RUN docker-php-ext-install pdo_mysql
EXPOSE 9000
CMD ["php-fpm"]
逐行解释:
- FROM:指定基础镜像,如同选择集装箱的类型。
- WORKDIR:设置工作目录,相当于进入集装箱内的指定货仓。
- COPY:将本地文件复制到容器内,类似将货物装入集装箱。
- RUN:执行命令安装扩展,如同在集装箱内添加必要工具。
- EXPOSE:声明容器监听的端口,确保外部可以访问。
- CMD:定义容器启动时运行的命令,如同集装箱的启动程序。
构建与运行容器:让 PHP 环境“动起来”
构建镜像
docker build -t my-php-app .
参数说明:
-t
:指定镜像名称(my-php-app
).
:表示 Dockerfile 位于当前目录
运行容器
docker run -d -p 9000:9000 --name my-php-container my-php-app
参数详解:
-d
:后台运行容器-p
:端口映射(宿主机 9000 → 容器 9000)--name
:指定容器名称my-php-app
:使用的镜像名称
验证 PHP 环境
在项目目录下创建 info.php
文件:
<?php
phpinfo();
通过浏览器访问 http://localhost:9000/info.php
,即可看到 PHP 配置信息。
配置 PHP 环境:扩展与优化
安装 PHP 扩展
以安装 mysqli
和 zip
扩展为例:
RUN docker-php-ext-install mysqli
RUN pecl install zip && docker-php-ext-enable zip
关键点:
docker-php-ext-install
:用于安装官方扩展pecl
:用于安装非官方 PECL 扩展docker-php-ext-enable
:启用扩展
调整 PHP 配置
通过修改 php.ini
文件实现性能优化:
RUN { \
echo 'memory_limit = 256M'; \
echo 'upload_max_filesize = 100M'; \
} >> /usr/local/etc/php/conf.d/custom.ini
方法解析:
- 通过追加配置文件的方式,避免直接修改原始
php.ini
- 使用
{ ... }
将多行命令合并为单个RUN
指令,减少镜像层数
实战案例:部署 PHP + Nginx 环境
案例场景
构建一个包含 Nginx 反向代理的完整 Web 环境,包含以下组件:
- PHP-FPM 处理动态请求
- Nginx 处理静态文件和反向代理
- 自动化构建流程
项目结构
my-php-app/
├── Dockerfile
├── nginx/
│ └── default.conf
├── www/
│ └── index.php
└── docker-compose.yml
Docker Compose 配置
version: '3'
services:
web:
build: .
ports:
- "9000:9000"
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
关键配置说明:
- volumes:将本地 Nginx 配置文件挂载到容器内
- depends_on:确保 Nginx 容器在 web 容器启动后运行
Nginx 配置文件示例
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass web:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
运行组合服务
docker-compose up -d
访问 http://localhost
,即可看到 PHP 应用的运行效果。
进阶技巧:扩展 Docker 安装 PHP 的能力
1. 多版本 PHP 共存
通过不同 Dockerfile 实现多版本管理:
FROM php:8.1-fpm
FROM php:7.4-fpm
2. 数据持久化
使用卷(Volume)保存动态生成的数据:
docker run -v my_php_data:/var/www/html ...
3. 网络配置优化
通过自定义网络提升容器间通信效率:
networks:
my-network:
driver: bridge
结论:拥抱 Docker 的 PHP 开发新范式
通过本文的实践,我们完成了从 Docker 环境搭建到复杂多容器应用部署的全流程。Docker 安装 PHP 的优势在于:
- 环境一致性:消除“在我的机器上能运行”的问题
- 快速迭代:通过版本控制管理 Dockerfile,实现配置可追溯
- 资源隔离:每个项目拥有独立的运行环境,避免依赖冲突
对于初学者,建议从简单的单容器环境开始,逐步尝试组合服务;中级开发者可探索 CI/CD 集成、性能调优等进阶主题。Docker 与 PHP 的结合,不仅是一次技术实践,更是现代 DevOps 文化的重要实践。
未来,随着云原生技术的普及,掌握 Docker 安装 PHP 的能力,将成为开发者应对复杂项目需求的核心竞争力。现在,不妨动手尝试搭建你的第一个 Docker 化 PHP 应用吧!