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 项目中。

相关推荐
nono牛2 小时前
完整bash语法教程:从零到专家
开发语言·chrome·bash
啥都不懂的小小白2 小时前
Java日志篇3:Logback 配置全解析与生产环境最佳实践
java·开发语言·logback
江沉晚呤时2 小时前
延迟加载(Lazy Loading)详解及在 C# 中的应用
java·开发语言·microsoft·c#
Hard but lovely2 小时前
C/C++ ---条件编译#ifdef
c语言·开发语言·c++
董世昌412 小时前
js怎样控制浏览器前进、后退、页面跳转?
开发语言·前端·javascript
南棱笑笑生2 小时前
20251211给飞凌OK3588-C开发板跑飞凌Android14时让OV5645摄像头以1080p录像
c语言·开发语言·rockchip
翔云 OCR API3 小时前
赋能文档的数字化智能处理:通用文字/文档/合同识别接口
开发语言·人工智能·python·计算机视觉·ocr
hoiii1873 小时前
MATLAB实现HOG特征提取与SVM行人检测
开发语言·支持向量机·matlab
JIngJaneIL3 小时前
基于Java酒店管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot