Sign inSign up

mikusa/docker-php

By mikusa

•Updated 22 days ago

预装常用扩展的多架构 PHP-FPM Alpine 镜像

Image
0

1.2K

mikusa/docker-php repository overview

⁠docker-php

这是一个基于官方 php:8.5-fpm-alpine 制作的通用 PHP-FPM 镜像,预装常用扩展, 并提供运行时用户和时区配置。

镜像只提供 PHP 运行环境,不包含应用程序、Web 服务器和数据库。应用文件需要从 宿主机挂载,HTTP 请求则由 Nginx 等 Web 服务器通过 FastCGI 转发给 PHP-FPM。

支持 linux/amd64 和 linux/arm64。

⁠和官方镜像的区别

在官方 PHP-FPM Alpine 镜像的基础上,本镜像增加了:

  • imagick、gd、exif:图片处理;
  • mysqli、pdo_mysql、pdo_pgsql:MySQL 和 PostgreSQL;
  • redis:Redis 缓存;
  • bcmath、intl、zip:常用 PHP 功能;
  • Composer 2、Git 和完整时区数据;
  • 通过 PUID、PGID 调整 www-data 的 UID 和 GID;
  • 通过 TZ 同时设置系统和 PHP 时区。

官方镜像已经内置 cURL、DOM、mbstring、OPcache、PDO SQLite、SQLite3 等模块, 本镜像直接保留这些模块。

PHP-FPM 监听容器内的 9000 端口,pm.max_requests 设置为 300,其余进程管理 参数沿用官方镜像默认值。

⁠镜像地址

Docker Hub:

mikusa/docker-php:8.5.10-fpm-alpine

GitHub Container Registry:

ghcr.io/mikusaa/docker-php:8.5.10-fpm-alpine

可用标签:

标签说明
8.5.10-fpm-alpine固定 PHP 补丁版本,生产环境推荐使用
8.5-fpm-alpine跟随最新的 PHP 8.5 补丁版本
latest当前推荐版本

⁠使用方法

下面以 Typecho 为例,假设程序文件位于当前目录的 typecho 文件夹。

services:
  php:
    image: mikusa/docker-php:8.5.10-fpm-alpine
    restart: unless-stopped
    environment:
      TZ: Asia/Shanghai
      PUID: 1000
      PGID: 1000
    volumes:
      - ./typecho:/home/wwwroot

  nginx:
    image: nginx:alpine
    restart: unless-stopped
    depends_on:
      - php
    ports:
      - "80:80"
    volumes:
      - ./typecho:/home/wwwroot:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

对应的 nginx.conf 可以从下面这份基础配置开始:

server {
    listen 80;
    server_name _;
    root /home/wwwroot;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php:9000;
    }
}

启动服务:

docker compose up -d

⁠环境变量

变量默认值说明
TZAsia/Shanghai系统和 PHP 使用的时区
PUID1000PHP-FPM 工作用户 www-data 的 UID
PGID1000PHP-FPM 工作用户 www-data 的 GID

PUID 和 PGID 必须是非零数字。它们应该与宿主机上应用文件的所有者一致, 否则 PHP 可能无法写入上传目录、缓存或配置文件。镜像只修改容器内 www-data 的身份, 不会递归修改挂载目录的权限。

⁠自定义 PHP 和 FPM

镜像沿用官方 PHP 配置。需要修改上传大小、内存限制等参数时,可以挂载自己的 ini:

services:
  php:
    volumes:
      - ./php.ini:/usr/local/etc/php/conf.d/zzz-custom.ini:ro

例如:

memory_limit = 256M
upload_max_filesize = 50M
post_max_size = 50M

需要调整 FPM worker 数量时,可以用同样的方式挂载额外配置:

services:
  php:
    volumes:
      - ./php-fpm.conf:/usr/local/etc/php-fpm.d/zzz-custom.conf:ro
[www]
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

⁠注意事项

  • 9000 是 FastCGI 端口,不是 HTTP 端口,不要直接暴露到公网;
  • 不要在 Compose 中设置 user:,入口脚本需要 root 权限来应用 PUID、PGID 和时区, PHP-FPM 工作进程仍会以 www-data 运行;
  • PHP 版本升级前应先检查应用程序及其扩展、插件的兼容性;
  • 生产环境建议固定完整版本标签,确认新镜像可用后再升级;
  • 应用文件、持久化目录和数据库需要单独备份,本镜像不会管理这些数据。

Tag summary

Content type

Image

Digest

sha256:05649cd0e…

Size

109.4 MB

Last updated

22 days ago

docker pull mikusa/docker-php