php镜像封装

dockerhub PHP官网:https://registry.hub.docker.com/_/php/

什么是PHP?

PHP是一种专为Web开发而设计的服务器端脚本语言,但也可以用作通用编程语言。 PHP可以添加到纯HTML中,也可以与各种模板引擎和Web框架一起使用。 PHP代码通常由解释器处理,该解释器既可以作为Web服务器上的本机模块实现,也可以作为公共网关接口(CGI)来实现。

怎样用这个镜像?

在PHP项目中创建一个Dockerfile

FROM php:7.4-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]

然后,运行命令以构建并运行Docker镜像:

$ docker build -t my-php-app .
$ docker run -it --rm --name my-running-app my-php-app

运行一个简单的PHP脚本:

对于许多简单的单个文件项目,您可能会发现编写完整的Dockerfile很不方便。在这种情况下,可以直接使用PHP Docker镜像运行PHP脚本:

$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php your-script.php

怎样安装更多的PHP扩展?

许多扩展已经被编译到镜像中,因此在进行更多编译之前,值得检查php -mphp -i的输出。

我们提供了辅助脚本docker-php-ext-configuredocker-php-ext-installdocker-php-ext-enable,以更轻松地安装PHP扩展。

为了使镜像更小,PHP的源代码保存在压缩的tar文件中。为了便于将PHP的源代码与任何扩展名链接,我们还提供了辅助脚本docker-php-source,以轻松提取tar或删除提取的源代码。注意:如果确实使用docker-php-source提取源代码,请确保在docker镜像的同一层将其删除。

FROM php:7.4-cli
RUN docker-php-source extract \
    # do important things \
    && docker-php-source delete

PHP核心扩展

例如,如果要具有带有gd扩展名的PHP-FPM映像,则可以继承您喜欢的基本镜像,并像这样编写自己的Dockerfile:

FROM php:7.4-fpm
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd

请记住,您必须手动为扩展安装依赖项。如果扩展程序需要自定义配置参数,则可以像本例一样使用docker-php-ext-configure脚本。在这种情况下,无需手动运行docker-php-source,因为它由configure和install脚本处理。

如果您在确定docker-php-ext-install之前需要确定安装哪些Debian或Alpine软件包时遇到困难,那么请查看install-php-extensions项目。该脚本基于docker-php-ext- *脚本构建,并通过自动添加和删除Debian(apt)和Alpine(apk)软件包来简化PHP扩展的安装。例如,要安装GD扩展,您只需运行install-php-extensions gd。该工具由社区成员提供,未包含在图像中,有关安装,使用和问题的信息,请参阅其Git存储库。

另请参阅“ Dockerizing编译的软件”,以获取有关Tianon用来确定软件的任何部分的必要构建时依赖关系的技术的描述(直接适用于编译PHP扩展)。

默认的扩展:

某些扩展默认情况下进行编译。这取决于您使用的PHP版本。在容器中运行php -m以获取特定版本的列表。

PECL 扩展

一些扩展未随PHP源一起提供,而是通过PECL提供。要安装PECL扩展,请使用pecl install下载并编译它,然后使用docker-php-ext-enable启用它:

FROM php:7.4-cli
RUN pecl install redis-5.1.1 \
    && pecl install xdebug-2.8.1 \
    && docker-php-ext-enable redis xdebug
FROM php:5.6-cli
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \
    && pecl install memcached-2.2.0 \
    && docker-php-ext-enable memcached

强烈建议用户在pecl安装调用中使用明确的版本号,以确保适当的PHP版本兼容性(选择要安装的扩展版本时,PECL不会检查PHP版本兼容性,而在尝试安装时会检查)。

例如,memcached-2.2.0没有PHP版本限制(https://pecl.php.net/package/memcached/2.2.0),但是memcached-3.1.4需要PHP 7.0.0或更高版本(https:/ /pecl.php.net/package/memcached/3.1.4)。在PHP 5.6上执行pecl install memcached(无特定版本)时,PECL将尝试安装最新版本并失败。

除了兼容性问题之外,确保您的依赖项何时接收更新并可以直接控制这些更新也是一种很好的做法

与PHP核心扩展不同,PECL扩展应按顺序安装,以防万一出问题。否则,PECL只会跳过错误。例如,pecl install memcached-3.1.4 && pecl install redis-5.1.1代替pecl install memcached-3.1.4 redis-5.1.1。但是,可以在一个命令中全部使用docker-php-ext-enable memcached redis。

其他扩展:

某些扩展不是通过Core或PECL提供的;这些也可以安装,尽管该过程自动化程度较低:

FROM php:5.6-cli
RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
    && mkdir -p xcache \
    && tar -xf xcache.tar.gz -C xcache --strip-components=1 \
    && rm xcache.tar.gz \
    && ( \
        cd xcache \
        && phpize \
        && ./configure --enable-xcache \
        && make -j "$(nproc)" \
        && make install \
    ) \
    && rm -r xcache \
    && docker-php-ext-enable xcache

docker-php-ext- *脚本可以接受任意路径,但是它必须是绝对路径(以与内置扩展名区分),因此上面的示例也可以编写如下:

FROM php:5.6-cli
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值