PHP 8.5 容器化实战指南
PHP 8.5 容器化提供了一种简单、可预测且实用的方式来运行应用,不用操心宿主机上装了什么。容器把 PHP、扩展和所有必需的工具打包在一起,帮助团队保持环境整洁、可复现且易于协作。思路很直接:构建镜像,从镜像启动容器,需要时分享镜像。PHP 8.5 带来了性能改进和更流畅的开发体验,把它和 Docker 结合是现代项目的自然选择。
前置条件
你只需要一台装了 Docker Engine 的机器和一个 Docker Hub 账号。准备好这些后,流程就很简单:创建 Dockerfile,构建镜像,运行容器测试,然后推送。
- Docker Engine 和 Docker Compose 安装教程
- 如果还没有账号,可以在 Docker Hub 注册
创建 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 命令。
如果发现问题,可以更新 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 项目中。