FrankenPHP Docker镜像使用完全指南
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
前言
FrankenPHP是一个基于Caddy服务器的现代化PHP运行时环境,通过Docker镜像可以快速部署PHP应用。本文将全面介绍如何定制和使用FrankenPHP的Docker镜像。
FrankenPHP镜像基础
FrankenPHP的Docker镜像基于官方PHP镜像构建,提供两种Linux发行版选择:
- Debian Bookworm - 推荐用于生产环境,稳定性更好
- Alpine Linux - 体积更小,适合资源受限的环境
镜像支持PHP 8.2、8.3和8.4版本,标签命名遵循以下模式:
dunglas/frankenphp:<frankenphp版本>-php<php版本>-<操作系统>
例如:dunglas/frankenphp:1.2.3-php8.3-bookworm
快速开始
基础使用
创建一个简单的Dockerfile:
FROM dunglas/frankenphp
COPY . /app/public
构建并运行容器:
docker build -t my-php-app .
docker run -it --rm --name my-running-app my-php-app
开发环境配置
在开发时,建议挂载本地目录作为卷:
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"
volumes:
- ./:/app/public
- caddy_data:/data
- caddy_config:/config
tty: true
volumes:
caddy_data:
caddy_config:
高级配置
安装PHP扩展
镜像内置了docker-php-extension-installer
脚本,可以轻松添加扩展:
FROM dunglas/frankenphp
RUN install-php-extensions \
pdo_mysql \
gd \
intl \
zip \
opcache
自定义Caddy模块
FrankenPHP基于Caddy构建,可以添加任何Caddy模块:
FROM dunglas/frankenphp:builder AS builder
COPY --from=caddy:builder /usr/bin/xcaddy /usr/bin/xcaddy
RUN CGO_ENABLED=1 \
XCADDY_SETCAP=1 \
XCADDY_GO_BUILD_FLAGS="-ldflags='-w -s' -tags=nobadger,nomysql,nopgx" \
CGO_CFLAGS=$(php-config --includes) \
CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
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
# 添加更多模块
FROM dunglas/frankenphp AS runner
COPY --from=builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp
Worker模式配置
设置环境变量启用Worker模式:
FROM dunglas/frankenphp
ENV FRANKENPHP_CONFIG="worker ./public/index.php"
安全最佳实践
非root用户运行
建议在生产环境中以非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 && chown -R ${USER}:${USER} /config/caddy
USER ${USER}
非特权端口运行
如果不需要使用80/443端口,可以完全移除权限:
FROM dunglas/frankenphp
ARG USER=appuser
RUN useradd ${USER}; \
setcap -r /usr/local/bin/frankenphp; \
chown -R ${USER}:${USER} /data/caddy && chown -R ${USER}:${USER} /config/caddy
USER ${USER}
然后设置SERVER_NAME
环境变量为:8000
等非特权端口。
镜像更新策略
FrankenPHP镜像会在以下情况下自动更新:
- 有新版本发布时
- 每天UTC时间4点检查官方PHP镜像更新
开发版本
开发版本镜像会随主分支提交自动构建,提供latest
标签和基于Git提交哈希的标签。
总结
FrankenPHP Docker镜像提供了灵活、安全的PHP运行环境,通过本文介绍的各种配置方法,可以满足从开发到生产的不同需求场景。无论是简单的PHP应用还是需要高度定制的环境,都能找到合适的部署方案。
frankenphp The modern PHP app server 项目地址: https://gitcode.com/gh_mirrors/fr/frankenphp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考