构建并推送自定义 PHP 8.2 FPM 镜像(适用于 Typecho)
本文档介绍如何在本地构建一个适用于 Typecho 的自定义 PHP 8.2 FPM 镜像,并将其推送至 Docker Hub。
准备工作目录
mkdir -p /opt/php
cd /opt/php
创建 Dockerfile
创建并编辑 Dockerfile 文件:
vim Dockerfile
添加以下内容:
FROM php:8.2-fpm
# 安装系统依赖和 PHP 扩展依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
git unzip libzip-dev libpng-dev libjpeg62-turbo-dev \
libfreetype6-dev libwebp-dev libxml2-dev libicu-dev \
libonig-dev libpq-dev libcurl4-openssl-dev sqlite3 libsqlite3-dev \
&& rm -rf /var/lib/apt/lists/*
# 配置并安装 PHP 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
&& docker-php-ext-install \
gd \
pdo_mysql \
mysqli \
pdo_sqlite \
zip \
bcmath \
exif \
intl \
opcache \
sockets \
mbstring \
xml \
curl
# 安装 Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# 设置工作目录
WORKDIR /var/www/html
# 配置 php.ini 参数优化
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
&& sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' "$PHP_INI_DIR/php.ini" \
&& sed -i 's/memory_limit = .*/memory_limit = 128M/' "$PHP_INI_DIR/php.ini" \
&& sed -i 's/upload_max_filesize = .*/upload_max_filesize = 32M/' "$PHP_INI_DIR/php.ini" \
&& sed -i 's/post_max_size = .*/post_max_size = 32M/' "$PHP_INI_DIR/php.ini" \
&& echo "opcache.enable=1" >> "$PHP_INI_DIR/php.ini" \
&& echo "opcache.enable_cli=1" >> "$PHP_INI_DIR/php.ini" \
&& echo "opcache.memory_consumption=128" >> "$PHP_INI_DIR/php.ini" \
&& echo "opcache.interned_strings_buffer=8" >> "$PHP_INI_DIR/php.ini" \
&& echo "opcache.max_accelerated_files=10000" >> "$PHP_INI_DIR/php.ini" \
&& echo "opcache.validate_timestamps=1" >> "$PHP_INI_DIR/php.ini" \
&& echo "opcache.revalidate_freq=2" >> "$PHP_INI_DIR/php.ini"
# 设置文件权限
RUN chown -R www-data:www-data /var/www/html
# 暴露端口
EXPOSE 9000
# 启动 php-fpm
CMD ["php-fpm"]
构建镜像
在包含 Dockerfile 的目录下执行以下命令:
docker build --no-cache -t php-8.2-fpm-typecho .
推送镜像到 Docker Hub
1. 登录 Docker Hub
docker login
2. 标记(Tag)镜像
将镜像打上你的 Docker Hub 用户名标签:
docker tag php-8.2-fpm-typecho YOUR_USERNAME/php-8.2-fpm-typecho:1.0
3. 推送镜像
执行推送操作:
docker push YOUR_USERNAME/php-8.2-fpm-typecho:1.0
后续操作(可选)
可以将该镜像用于 Nginx + PHP-FPM 的 Typecho 部署,结合 Docker Compose 使用将更方便。
验证与自查
docker images | grep php-8.2-fpm-typecho确认镜像已构建- 检查关键扩展已启用:
docker run --rm php-8.2-fpm-typecho php -m | grep -E 'gd|pdo_mysql|pdo_sqlite|intl|zip' - 验证 php.ini 优化参数:
docker run --rm php-8.2-fpm-typecho php -i | grep -E 'memory_limit|upload_max_filesize|opcache.enable' - 推送后在其他机器执行
docker pull YOUR_USERNAME/php-8.2-fpm-typecho:1.0能拉取成功