本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
PHP 7.2容器镜像是一个基于Source-to-Image(S2I)的基础镜像,用于构建和运行PHP 7.2应用程序。用户可以选择基于RHEL或CentOS的构建器镜像:
生成的镜像可使用podman或docker运行(本文档中所有podman命令均可替换为docker命令,参数保持不变)。
假设使用ubi8/php-72镜像,在OpenShift中可通过php:72镜像流标签访问。
构建示例cakephp应用:
oc new-app php:7.2~[***]
访问应用:
oc get pods oc exec <pod名称> -- curl 127.0.0.1:8080
或直接访问:
curl 127.0.0.1:8080
该镜像支持OpenShift的Source-to-Image(S2I)策略,这是一个将应用源代码作为输入,使用构建器镜像生成可运行应用镜像的框架。
构建器镜像包含以下重要脚本:
/usr/libexec/s2i/assemble: 用于生成包含应用程序工件的新镜像,将应用源代码放置到镜像中的适当目录/usr/libexec/s2i/run: 作为生成的容器镜像的默认命令,启动启用PHP支持的httpd服务与Source-to-Image策略相比,使用Dockerfile是构建包含应用程序的PHP容器镜像的更灵活方式,适用于S2I不够灵活或在OpenShift环境外构建镜像的场景。
podman pull ubi8/php-72
UBI镜像
ubi8/php-72可在UBI最终用户许可协议(EULA)条款下自由使用和重新分发。
以cakephp示例应用为例:
git clone [***] app-src
此步骤通常包括:将应用源代码放入容器、安装依赖项、设置生成镜像的默认命令。有两种方法可实现:
创建以下Dockerfile:
FROM ubi8/php-72 # 添加应用源代码 ADD app-src . # 安装依赖 RUN TEMPFILE=$(mktemp) && \ curl -o "$TEMPFILE" "[***]" && \ php <"$TEMPFILE" && \ ./composer.phar install --no-interaction --no-ansi --optimize-autoloader # 运行脚本使用标准方式配置PHP应用并最终执行httpd -D FOREGROUND CMD /usr/libexec/s2i/run
创建以下Dockerfile:
FROM ubi8/php-72 # 将应用源代码添加到assemble脚本期望的目录并设置权限 USER 0 ADD app-src /tmp/src RUN chown -R 1001:0 /tmp/src USER 1001 # 安装依赖 RUN /usr/libexec/s2i/assemble # 设置生成镜像的默认命令 CMD /usr/libexec/s2i/run
podman build -t cakephp-app .
podman run -d cakephp-app
可在源代码仓库中的.s2i/environment文件中设置键值对形式的环境变量。
以下环境变量设置php.ini文件中的相应属性值:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| ERROR_REPORTING | 配置PHP错误、警告和通知的报告级别 | E_ALL & ~E_NOTICE |
| DISPLAY_ERRORS | 控制PHP是否输出错误、通知和警告 | ON |
| DISPLAY_STARTUP_ERRORS | 控制PHP启动序列期间发生的错误是否单独处理 | OFF |
| TRACK_ERRORS | 是否将最后一个错误/警告消息存储在$php_errormsg中 | OFF |
| HTML_ERRORS | 是否将错误链接到相关文档 | ON |
| INCLUDE_PATH | PHP源代码文件路径 | .:/opt/app-root/src:/opt/rh/rh-php72/root/usr/share/pear (EL7) .:/opt/app-root/src:/usr/share/pear (EL8, Fedora) |
| PHP_MEMORY_LIMIT | 内存限制 | 128M |
| SESSION_NAME | 会话名称 | PHPSESSID |
| SESSION_HANDLER | 会话保存方法 | files |
| SESSION_PATH | 会话数据文件位置 | /tmp/sessions |
| SESSION_COOKIE_DOMAIN | Cookie有效的域 | 空 |
| SESSION_COOKIE_HTTPONLY | 是否为Cookie添加httpOnly标志 | 0 |
| SESSION_COOKIE_SECURE | 是否仅通过安全连接发送Cookie | Off |
| SHORT_OPEN_TAG | PHP是否识别标签之间的代码 | OFF |
| DOCUMENTROOT | 应用程序的DocumentRoot路径 | / |
以下环境变量设置opcache.ini文件中的相应属性值:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| OPCACHE_MEMORY_CONSUMPTION | OPcache共享内存存储大小(MB) | 128 |
| OPCACHE_REVALIDATE_FREQ | 检查脚本时间戳更新的频率(秒) | 2 |
| OPCACHE_MAX_FILES | OPcache哈希表中的最大键(脚本)数 | 4000 |
| 环境变量 | 描述 |
|---|---|
| PHPRC | 设置php.ini文件的路径 |
| PHP_INI_SCAN_DIR | 扫描其他ini配置文件的路径 |
可覆盖Apache MPM prefork设置以提高PHP应用性能:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| HTTPD_START_SERVERS | 启动时创建的子服务器进程数 | 8 |
| HTTPD_MAX_REQUEST_WORKERS | 同时服务的请求数限制 | 256(通过公式自动调整:总内存/15MB) |
| 环境变量 | 描述 |
|---|---|
| COMPOSER_MIRROR | 自定义composer仓库镜像URL |
| COMPOSER_INSTALLER | 覆盖默认Composer下载URL |
| COMPOSER_ARGS | 添加额外的composer install命令行参数 |
现有PHP项目仓库无需修改,但以下文件会影响构建过程:
需通过composer安装的依赖项列表,格式文档见Composer架构。
如果应用程序的DocumentRoot嵌套在源代码目录/opt/app-root/src中,用户可以提供自己的Apache .htaccess文件,用于覆盖Apache行为并指定如何处理应用程序请求。该文件需要位于应用程序源代码的根目录。
要立即获取应用源代码中的更改,需使用OPCACHE_REVALIDATE_FREQ=0环境变量运行构建的镜像:
podman run -e OPCACHE_REVALIDATE_FREQ=0 -p 8080:8080 php-app
要在运行中的容器中更改源代码,使用Podman的exec命令:
podman exec -it <容器ID> /bin/bash
执行后,当前目录将设置为源代码所在的/opt/app-root/src目录。
不仅可以扩展镜像内容,还可以使用source-to-image扩展镜像的启动脚本和配置。应用程序结构如下:
| 文件夹名称 | 描述 |
|---|---|
./httpd-cfg | 可包含其他Apache配置文件(*.conf) |
./httpd-ssl | 可包含自己的SSL证书(在certs/子目录)和密钥(在private/子目录) |
./php-pre-start | 可包含在httpd启动前执行的shell脚本(*.sh) |
./php-post-assemble | 可包含在assemble脚本结束时执行的shell脚本(*.sh) |
./ | 应用程序源代码 |
# 基本运行 docker run -d -p 8080:8080 --name php-app ubi8/php-72 # 带环境变量配置 docker run -d -p 8080:8080 \ -e PHP_MEMORY_LIMIT=256M \ -e OPCACHE_REVALIDATE_FREQ=0 \ --name php-app ubi8/php-72 # 挂载本地代码目录进行开发 docker run -d -p 8080:8080 \ -v ./my-php-app:/opt/app-root/src \ -e OPCACHE_REVALIDATE_FREQ=0 \ --name php-dev-app ubi8/php-72
version: '3' services: php-app: image: ubi8/php-72 ports: - "8080:8080" environment: - PHP_MEMORY_LIMIT=256M - ERROR_REPORTING=E_ALL - DISPLAY_ERRORS=ON - OPCACHE_REVALIDATE_FREQ=0 volumes: - ./my-php-app:/opt/app-root/src restart: unless-stopped
-p 8080:8080参数会将容器端口8080映射到主机的相同端口,确保仅在必要时暴露端口DISPLAY_ERRORS=OFF以避免敏感信息泄露SESSION_COOKIE_SECURE=On和SESSION_COOKIE_HTTPONLY=1增强会话安全性Dockerfile和其他源代码可在[***]
DockerfileDockerfile.rhel7Dockerfile.rhel8Dockerfile.fedora免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429