2024-04-03 渥太华微生活
在制作定制化的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就可以了。
例如,如果你需要PHP 7.2版本,你可以选择php:7.2-fpm作为基础镜像。
在Dockerfile中,使用FROM命令指定基础镜像。例如:
FROM php:7.2-fpm
步骤二:安装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镜像的基本指导。
根据你的具体需求和项目配置,可能需要进行进一步的调整和优化。
编者注:新闻取自各大新闻媒体,新闻内容并不代表本网立场!文字和图片来自网络,版权归原作者所有。如有侵权,请速联系小编,立即删除。
全部评论 (0) |
---|