PHP 8.5 结合Docker 容器化实战指南,SO EASY!

PHP 8.5 容器化提供了一种简单、可预测且实用的方式来运行应用,不用操心宿主机上装了什么。容器把 PHP、扩展和所有必需的工具打包在一起,帮助团队保持环境整洁、可复现且易于协作。思路很直接:构建镜像,从镜像启动容器,需要时分享镜像。PHP 8.5 带来了性能改进和更流畅的开发体验,把它和 Docker 结合是现代项目的自然选择。

前置条件

你只需要一台装了 Docker Engine 的机器和一个 Docker Hub 账号。准备好这些后,流程就很简单:创建 Dockerfile,构建镜像,运行容器测试,然后推送。

  • • Docker Engine 和 Docker Compose 安装教程[1]
  • • 如果还没有账号,可以在 Docker Hub[2] 注册

创建 PHP 8.5 的 Dockerfile

在写 Dockerfile 或推送到 Docker Hub 之前,先理解镜像和容器的关系会有帮助。镜像是一个只读模板,定义了基础系统、已安装的包以及启动应用所需的所有指令。容器是镜像的运行实例,在应用运行时持有你的文件系统和进程环境。镜像可以分享、打标签和多次复用,所以很适合协作和 CI 流程。

Dockerfile 是一个纯文本文件,包含描述如何构建镜像的指令。下面是一个基于官方 PHP FPM 基础镜像的 PHP 8.5 Dockerfile,安装了常用扩展、Composer 以及一些对多数 PHP 应用有用的包。

# 使用基础镜像:PHP-FPM,版本 8.5.0
FROM php:8.5.0-fpm

# 安装基础 apt 包
RUN apt-get update && apt-get install -y apt-utils unzip gnupg2 libpng-dev zlib1g-dev

# 下载并安装 composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 安装并启用 PHP 扩展
RUN docker-php-ext-install bcmath pcntl gd

这个基础镜像包含 PHP 8.5 FPM、工具和 Composer,你可以根据需要扩展。思路是保持镜像小巧且可预测,构建快,维护成本低。

构建和测试 PHP 8.5 镜像

Dockerfile 准备好后,进入其所在目录并构建镜像:

docker build -t php-base .

Docker 会逐行读取 Dockerfile 并输出构建进度,可能需要一些时间:

[+] Building 42.1s (9/9) FINISHED                                                docker:default
=> [internal] load build definition from Dockerfile                                       0.0s
=> => transferring dockerfile: 434B                                                       0.0s
=> [internal] load metadata for docker.io/library/php:8.5.0-fpm                           0.8s
=> [auth] library/php:pull token for registry-1.docker.io                                 0.0s
=> [internal] load .dockerignore                                                          0.0s
=> => transferring context: 2B                                                            0.0s
=> CACHED [1/4] FROM docker.io/library/php:8.5.0-fpm@sha256:559e1cab264b847fd752f5e85e65f0ce9fcd49b4b6b535edb54ea738ab8d56ce  0.0s
=> [2/4] RUN apt-get update && apt-get install -y apt-utils unzip gnupg2 libpng-dev zlib1g-dev  9.7s
=> [3/4] RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer  2.4s
=> [4/4] RUN docker-php-ext-install bcmath pcntl gd                                      28.9s
=> exporting to image                                                                     0.2s
=> => exporting layers                                                                    0.2s
=> => writing image sha256:7db68930f198118d0365640b01a34d525ac2bcb3bfef6ac4454d11394016a79e  0.0s
=> => naming to docker.io/library/php-base

构建完成后,你可以从这个新镜像运行一个容器:

docker run --name php-base -d php-base

进入容器内部检查环境:

docker exec -it php-base bash

在这个 shell 里可以检查 PHP 版本、已安装的扩展或运行 Composer 命令。

PHP 8.5 容器化实战指南
PHP 8.5 容器化实战指南

如果发现问题,可以更新 Dockerfile 并重新构建镜像。

管理镜像和容器

Docker 提供了简单的命令来检查和管理本地资源。

列出镜像:

docker image ls

列出容器:

docker container ls -a

停止和删除容器也很简单:

docker stop php-base
docker rm php-base

删除过时的镜像只需一行:

docker rmi php-base

熟悉这些基本命令能加快开发流程,保持本地环境整洁。

发布 PHP 8.5 镜像到 Docker Hub

镜像表现符合预期后,你可能想和团队分享或在 CI 流水线中使用。Docker Hub 让这件事很简单。

首先登录:

docker login --username=my_username

将 my_username 替换为你的 Docker Hub 用户名,提示时输入密码。

使用推荐的 username/repository:tag 格式给镜像打标签。在我们的例子中:

docker tag php-base hibitdev/php-base:8.5.0-fpm
docker tag php-base hibitdev/php-base:latest

将两个标签推送到 Docker Hub:

docker push hibitdev/php-base:8.5.0-fpm
docker push hibitdev/php-base:latest

现在你可以访问 Docker Hub 个人主页查看仓库列表。任何有权限的人都可以拉取:

docker pull hibitdev/php-base:latest

总结

PHP 8.5 容器化帮助你保持开发和生产环境的一致性,更易于管理。构建镜像、运行容器、通过 Docker Hub 分享工作成果,形成了清晰的工作流程,支持团队协作和顺畅的部署。掌握这些基础后,就能轻松把这种方式应用到任何 PHP 项目中。

引用链接

[1] Docker Engine 和 Docker Compose 安装教程: https://docs.docker.com/engine/install/
[2] Docker Hub: https://hub.docker.com/

来源:月下三贵

THE END