如何制作定制化的PHP Docker镜像

2024-04-03 渥太华微生活

111111.jpg

在制作定制化的PHP Docker镜像之前,你需要明确你的项目对PHP版本和扩展的需求。一旦明确了需求,你就可以开始构建镜像了。


步骤一:选择基础镜像

首先,你需要选择一个合适的基础镜像。

Docker提供了多种官方PHP镜像,你可以根据自己的需求选择。

PHP 基础镜像分为三个分支:

  • php-cli: 没有开启 CGI,也就是说不能运行fpm,只可以运行命令行。适用于那些希望在命令行中直接运行 PHP 脚本的情况,例如运行 Composer 命令或 Symfony 控制台命令。它也可用于基于其他镜像的构建过程。

  • php-fpm: 开启了CGI,可以用来运行web服务,也可以用来运行cli命令。适用于需要将 PHP 与 FastCGI 兼容的 web 服务器(如 Apache 或 Nginx)一起使用的情况。它在 web 应用程序的部署中起到关键作用,能够处理 PHP 脚本的请求并返回结果。

  • php-zts: 开启了线程安全的版本。

  • php-apache:这是预配置了 mod_php 的 Apache 服务器。适用于那些希望将 PHP 与 Apache 服务器一起使用的情况。

  • php-alpine:这是基于 Alpine Linux 构建的最小化 Docker 镜像,尽管存在一些兼容性问题,但可以用于特定情况。

一般运行于linux平台的,选用fpm就可以了。

4293374877-5992beea788d2_fix732.jpg

例如,如果你需要PHP 7.2版本,你可以选择php:7.2-fpm作为基础镜像。

在Dockerfile中,使用FROM命令指定基础镜像。例如:

FROM php:7.2-fpm

docker_php.jpg


步骤二:安装PHP扩展

定制PHP镜像的主要工作是安装各种PHP扩展。

在Dockerfile中,你可以使用以下几种方法来安装PHP扩展:

1、安装 dockerhub 中 php 官方提供的扩展

在 DockerHub 中提供了一些官方的 PHP 扩展,可以通过 docker-php-ext-install 脚本命令在 Dockerfile 中列出要安装的扩展,下面让我们的 PHP 镜像安装上常用的 pdo、pdo_mysql、mcrypt 这些扩展。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath

如果你需要对扩展指定一些自定义的编译参数的话,docker 提供了另外一个有用的脚本 docker-php-ext-configure 来传递编译参数(一般情况下用不到)。

FROM php:7.2-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

2、使用 PECL 安装扩展

DockerHub 上只是提供了一部分 PHP 的扩展,安装这些以外的扩展仍然需要 PECL, 在 Docker 镜像中使用 pecl install 下载、编译、安装扩展然后使用 docker-php-ext-enable

下面使用 PECL 安装了 PHP 的 redis 还有 grpc 扩展。

RUN pecl install grpc \
     && docker-php-ext-enable grpc \
     && pecl install -o -f redis \
     && docker-php-ext-enable redis \
     && rm -rf /tmp/pear

3、使用apt-get安装扩展:

如果你的基础镜像是基于Debian或Ubuntu的,你可以使用 apt-get 命令来安装PHP扩展。

例如,要安装gd扩展,你可以运行:

RUN apt-get update && apt-get install -y 
    libfreetype6 
    libjpeg62-turbo 
    libpng16-16 
RUN docker-php-ext-install -j$(grep -c ^processor /proc/cpuinfo) 
    gd

4、使用源码安装扩展

有些扩展既无法使用 docker-php-ext-install 安装,也无法通过 PECL 安装,只能通过源码编译安装(PHP 扩展型的框架 Phalcon 就是这样,不过设置比较复杂), 在 Docker 中同样能够通过源码安装 PHP 扩展。

RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p /tmp/xcache \
    && tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && docker-php-ext-configure /tmp/xcache --enable-xcache \
    && docker-php-ext-install /tmp/xcache \
    && rm -r /tmp/xcache

5、编写脚本动态安装扩展

如果你需要动态地检查系统配置并安装适当的扩展,你可以编写一个Shell脚本,并在Dockerfile中运行它。

例如,创建一个名为install_extensions.sh的脚本,其中包含用于检查和安装扩展的代码。然后在Dockerfile中运行该脚本:

COPY install_extensions.sh /usr/local/bin/install_extensions.sh
RUN ./install_extensions.sh

步骤三:配置PHP

在安装完所需的扩展后,你可能还需要配置PHP。你可以通过编辑 php.ini 文件来调整PHP的配置选项。

在Dockerfile中,你可以使用COPY命令将本地的php.ini文件复制到镜像中的适当位置。例如:

COPY php.ini /usr/local/etc/php/php.ini

步骤四:构建镜像

完成上述步骤后,你可以使用以下命令构建Docker镜像:

docker build -t your_image_name .

其中,your_image_name是你为镜像指定的名称。构建完成后,你可以使用以下命令运行容器:

docker run -d your_image_name

这将以守护进程模式运行你的PHP应用程序。


结论:

请注意,上述步骤仅提供了构建定制化PHP Docker镜像的基本指导。

根据你的具体需求和项目配置,可能需要进行进一步的调整和优化。

二维码 | 渥太华微生活

编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。

125
全部评论 (0)
展开快速发表评论

科技专栏