FrankenPHP项目Docker镜像使用完全指南
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
前言
FrankenPHP是一个创新的PHP运行时环境,它基于Caddy服务器构建,提供了高性能的PHP执行能力。本文将详细介绍如何通过Docker容器化方式来使用FrankenPHP,包括镜像构建、扩展安装、开发环境配置等实用技巧。
FrankenPHP Docker镜像概述
FrankenPHP提供了基于官方PHP镜像构建的Docker镜像,支持多种架构和Linux发行版:
-
基础镜像选择:
- 提供Debian和Alpine Linux两种变体
- 推荐使用Debian变体以获得更好的兼容性
-
PHP版本支持:
- 支持PHP 8.2、8.3和8.4版本
- 每个版本都有对应的标签可供选择
基础使用方法
创建简单的PHP应用
要使用FrankenPHP运行PHP应用,只需创建一个简单的Dockerfile:
FROM dunglas/frankenphp
# 将项目文件复制到容器中
COPY . /app/public
构建并运行镜像:
docker build -t my-php-app .
docker run -it --rm --name my-running-app my-php-app
扩展PHP功能
安装额外PHP扩展
FrankenPHP镜像内置了方便的扩展安装工具,可以轻松添加所需扩展:
FROM dunglas/frankenphp
# 安装常用PHP扩展
RUN install-php-extensions \
pdo_mysql \ # MySQL数据库支持
gd \ # 图像处理
intl \ # 国际化支持
zip \ # ZIP压缩
opcache # OPcache加速
安装Caddy模块
FrankenPHP基于Caddy构建,可以添加任何Caddy模块:
FROM dunglas/frankenphp:builder AS builder
# 使用xcaddy构建自定义FrankenPHP二进制文件
RUN CGO_ENABLED=1 \
XCADDY_SETCAP=1 \
xcaddy build \
--output /usr/local/bin/frankenphp \
--with github.com/dunglas/frankenphp=./ \
--with github.com/dunglas/frankenphp/caddy=./caddy/ \
--with github.com/dunglas/caddy-cbrotli # 添加Brotli压缩支持
FROM dunglas/frankenphp AS runner
COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp
高级配置技巧
启用Worker模式
要启用FrankenPHP的Worker模式,只需设置环境变量:
ENV FRANKENPHP_CONFIG="worker ./public/index.php"
开发环境配置
在开发时,可以使用Volume挂载实现代码热更新:
docker run -v $PWD:/app/public -p 80:80 -p 443:443 -p 443:443/udp --tty my-php-app
使用Docker Compose的推荐配置:
services:
php:
image: dunglas/frankenphp
ports:
- "80:80"
- "443:443"
- "443:443/udp" # HTTP/3支持
volumes:
- ./:/app/public
- caddy_data:/data
- caddy_config:/config
tty: true # 开发模式下可读性更好的日志
volumes:
caddy_data:
caddy_config:
安全最佳实践
建议以非root用户运行容器:
FROM dunglas/frankenphp
ARG USER=appuser
RUN useradd ${USER} && \
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp && \
chown -R ${USER}:${USER} /data/caddy /config/caddy
USER ${USER}
镜像更新策略
FrankenPHP Docker镜像会在以下情况下自动更新:
- 有新版本发布时
- 每天UTC时间4点检查官方PHP镜像更新
开发版本使用
对于需要最新开发版本的用户:
- 开发镜像提供了
latest
标签指向最新代码 - 也可以通过特定提交的哈希值获取特定版本
结语
通过本文介绍的各种技巧,您可以充分利用FrankenPHP Docker镜像的强大功能,无论是开发环境搭建还是生产环境部署,都能获得优秀的PHP执行性能和便捷的开发体验。
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考