PHP 8.5 容器化实战指南

PHP 8.5 容器化实战指南

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

原文链接 PHP 8.5 容器化实战指南

前置条件

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

创建 PHP 8.5 的 Dockerfile

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

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

dockerfile 复制代码
# 使用基础镜像: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 准备好后,进入其所在目录并构建镜像:

bash 复制代码
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

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

bash 复制代码
docker run --name php-base -d php-base

进入容器内部检查环境:

bash 复制代码
docker exec -it php-base bash

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

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

管理镜像和容器

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

列出镜像:

bash 复制代码
docker image ls

列出容器:

bash 复制代码
docker container ls -a

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

bash 复制代码
docker stop php-base
docker rm php-base

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

bash 复制代码
docker rmi php-base

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

发布 PHP 8.5 镜像到 Docker Hub

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

首先登录:

bash 复制代码
docker login --username=my_username

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

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

bash 复制代码
docker tag php-base hibitdev/php-base:8.5.0-fpm
docker tag php-base hibitdev/php-base:latest

将两个标签推送到 Docker Hub:

bash 复制代码
docker push hibitdev/php-base:8.5.0-fpm
docker push hibitdev/php-base:latest

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

bash 复制代码
docker pull hibitdev/php-base:latest

总结

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

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端