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"]

逐行解释:

  1. FROM:指定基础镜像,如同选择集装箱的类型。
  2. WORKDIR:设置工作目录,相当于进入集装箱内的指定货仓。
  3. COPY:将本地文件复制到容器内,类似将货物装入集装箱。
  4. RUN:执行命令安装扩展,如同在集装箱内添加必要工具。
  5. EXPOSE:声明容器监听的端口,确保外部可以访问。
  6. 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 扩展

以安装 mysqlizip 扩展为例:

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 环境,包含以下组件:

  1. PHP-FPM 处理动态请求
  2. Nginx 处理静态文件和反向代理
  3. 自动化构建流程

项目结构

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 应用吧!

最新发布