基于 CentOS 构建 Nginx + PHP-FPM Docker 镜像实操指南

南乔
南乔
发布时间:2026-10-13| 3人浏览过
原创

在使用 Docker 部署 LNMP 环境时,官方镜像往往无法完全满足特定的模块加载需求(如旧版 PHP 扩展或特定数据库驱动)。本文将演示如何通过编写 Dockerfile,在 CentOS 基础上编译安装 Nginx 和 PHP 5.6,并集成 Memcache、Redis 等常用扩展,最终生成一个轻量且功能完整的自定义镜像。

构建前准备:获取源码与依赖

构建自定义镜像的核心在于将所需的服务打包进容器。对于本案例,我们需要准备好 Nginx、PHP 源码包以及相关的扩展文件。由于版本较旧,建议先从官方归档站点获取以下资源:

  • Nginx: nginx-1.9.5.tar.gz (示例版本)
  • PHP: php-5.6.14.tar.gz (示例版本)
  • MongoDB 扩展: mongo-1.6.11.tgz (PECL 源)
  • Memcache 扩展: memcache-2.2.4.tgz

构建流程:从零开始组装环境

第一步:初始化系统与基础依赖

Docker 镜像通常从精简的系统镜像起步。我们选择 centos:latest 作为基础镜像,因为 CentOS 拥有完善的 yum 包管理器,便于处理复杂的编译依赖。

# 若需使用第三方仓库工具,可先安装 Atomicorp 源
wget http://www.atomicorp.com/installers/atomic
sh ./atomic

接着,安装编译 Nginx 和 PHP 所需的通用开发库。这一步是后续顺利执行 configure 脚本的关键,务必保证所有 -devel 包齐全:

yum install -y gcc gcc-c++ kernel-devel
yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
yum install -y libxml2 libxml2-devel
yum install -y bzip2 bzip2-devel curl-devel
yum install -y php-mcrypt libmcrypt libmcrypt-devel
yum install -y libjpeg* freetype* libpng*
yum install -y uw-imap-devel libxslt-devel zip unzip autoconf libc-client.x86_64

第二步:编译安装 Nginx

Nginx 的编译相对标准。解压源码后,进入目录执行 configure 并指定需要的模块(此处以启用 SSL 为例):

./configure --with-http_ssl_module
make && make install

安装完成后,默认路径通常为 /usr/local/nginx。可通过以下命令验证安装的模块:

/usr/local/nginx/sbin/nginx -V

第三步:编译安装 PHP 核心

为了支持 Web 应用,我们需要编译带有 FastCGI Process Manager (FPM) 支持的 PHP。鉴于需要挂载多种数据库和缓存,Configure 参数较为冗长,请确保路径正确:

./configure --prefix=/usr/local/php \
  --with-zlib-dir --with-freetype-dir --enable-mbstring \
  --with-libxml-dir=/usr/local/libxml --enable-soap \
  --with-curl --with-mcrypt --with-gd \
  --with-jpeg-dir=/usr/local/libjpeg --with-png-dir=/usr/local/libpng \
  --with-openssl --with-fpm-user=www --with-fpm-group=www \
  --enable-fpm --enable-opcache --enable-sockets

注意: 如果此前未安装 libxml 或相关图形库的路径不是默认路径,请务必调整 --with-xxx-dir 指向正确的头文件位置。编译成功后,PHP 主程序位于 /usr/local/php。

第四步:集成扩展模块 (Memcache / Redis / MongoDB)

在容器中安装动态扩展 (.so),通常遵循 “phpize -> configure -> make” 的标准流程。以 Memcache 为例:

tar -zvxf memcache-2.2.4.tgz
cd memcache-2.2.4
/usr/local/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config
make && make install

同理,安装 Redis 扩展:

wget https://github.com/nicolasff/phpredis/archive/master.zip -O php-redis.zip
unzip php-redis.zip
cd phpredis-master
/usr/local/php/bin/phpize
./configure --enable-redis --with-php-config=/usr/local/php/bin/php-config
make && make install

若需 MongoDB 支持,逻辑一致:

wget https://pecl.php.net/get/mongo-1.6.11.tgz
tar -zvxf mongo-1.6.11.tgz
cd mongo-1.6.11
/usr/local/php/bin/phpize
./configure --enable-mongo --with-php-config=/usr/local/php/bin/php-config
make && make install

第五步:配置生效与瘦身优化

编译生成的 .so 文件需要被 PHP 识别。编辑配置文件:

vi /usr/local/php/etc/php.ini
# 在末尾添加:
extension = redis.so
extension = memcache.so
extension = mongo.so

构建完成后,容器内会残留大量的安装包和临时文件,这会导致镜像体积臃肿。利用 yum 清理机制可以有效缩减体积:

make clean
yum clean all
rm -rf /var/cache/yum/* /tmp/*

镜像运行与启动配置

入口命令定义

在 Dockerfile 中,通常需要明确容器的启动脚本。分别启动两个进程的命令如下:

# 启动 Nginx
/usr/local/nginx/sbin/nginx

# 启动 PHP-FPM (指定配置文件)
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

在实际生产环境中,建议使用 Supervisor 或其他多进程管理工具将它们统管在一个 PID 1 进程中,以确保容器退出时信号能正确传递。若无此需求,可简单编写 shell 脚本同时启动两者。

容器实例化运行

假设镜像构建完成且命名为 img-nginx-php,可使用以下命令启动:

docker run -dt --name nginx-php \
  --privileged=true \
  -v /home/www/nginx_logs:/usr/local/nginx/logs \
  -v /home/www/src:/usr/local/nginx/html \
  -p 80:80 -p 443:443 \   img-nginx-php

此处使用了挂载卷(Volume)技术将日志和网站源码映射到宿主机,方便调试和维护。端口 80 和 443 分别用于 HTTP 和 HTTPS 访问。

以上就是利用 Docker 制作 Nginx + PHP 自定义镜像的详细步骤,更多关于搭建高性能 Web 环境的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。