在哪里存储docker-php-ext文件?

时间:2019-01-26 18:46:44

标签: php docker dockerfile

我已经在Docker容器中设置了一个Symfony4项目。

我跟踪Jobeet-Turotial,因为他们使用的是the phpdocker.io - generator

一切正常,但速度很慢。因此,我想加速并启用opcache并对其进行配置。

我在网络上找到了有用的链接。因此,我将此添加到了Dockerfile中:

RUN docker-php-ext-configure opcache --enable-opcache \
&& docker-php-ext-install opcache

复制配置

复制config / opcache.ini $ PHP_INI_DIR / conf.d /

问题是我没有此帮助脚本:

  • docker-php-ext-configure
  • docker-php-ext-install
  • docker-php-ext-enable

因此,我决定在互联网上进行搜索并将其复制到我的项目中。

现在我将其保存在我的docker目录的php-fpm文件夹中。

我的目录现在看起来像这样-脚本在Dockerfile的下面:

enter image description here

还有其他我忘了做的步骤吗? 在某个地方注册此脚本? 还是其他一些东西?

我真的想使用这个辅助脚本。

迈克尔

1 个答案:

答案 0 :(得分:1)

您问题的最直接答案是,您需要将这些脚本复制到要构建的Docker映像中。为此,您应该在php-fpm目录中创建一个名为bin的子目录,并将所有这些脚本放入该目录中。然后,在您的Dockerfile中:

COPY bin /usr/local/bin

现在,当您尝试使用该图像时,脚本将位于可执行文件PATH中。

但是

您发现的这些docker-php-ext-*脚本来自the PHP project's official Docker images,旨在与这些图像一起使用。

您正在使用phpdockerio/php73-fpm:latest图片which seems to use ubuntu:bionic as a base image。这些脚本在很大程度上依赖于PHP Dockerfile,这些文件执行许多准备步骤,例如downloading the source code for the PHP interpreter itself to /usr/src。使这些脚本直接在phpdockerio容器中运行将是一个非常复杂的过程。

剩下两个选项:

  1. 放弃脚本并安装Ubuntu的预构建软件包。您seem to already have已安装apcu,apcu-bc,cli,curl,json,mbstring,opcache,readline,xml和zip PHP扩展。您可以通过运行

    来查看默认存储库中可用的软件包的完整列表。
    docker run --rm -it phpdockerio/php73-fpm:latest bash -c 'apt-get update && apt search ^php7.3-';
    

    知道所需的软件包后,可以将它们添加到Dockerfile中。

  1. 改为使用正式的PHP映像,以便您可以使用docker-php-ext-*脚本。您使用的phpdocker-io映像本质上是Ubuntu上的PHP7.3-FPM,与此最接近的官方PHP映像是php:7.3-fpm-stretch(Debian 9)。您可以通过将PHP-FPM Dockerfile更改为以下内容来构建和安装选项1中列出的扩展:

    FROM php:7.3-fpm-stretch
    
    # Run in Bash instead of Bourne shell to get lists
    RUN ["bash", "-c", " \
        #Exits on error or unbound variable. Now we can use semicolons instead of
        #ampersands
        set -eu; \
    \
        ext_build_dependencies=( \
            #Needed to build php-curl
            libcurl4-gnutls-dev \
            \
            #Needed to build php-mbstring
            libedit-dev \
            \
            #Needed to build php-xml \
            libxml2-dev \
            \
            #Needed to build php-zip
            zlib1g-dev libzip-dev \
        ); \
    \
        apt-get update; \
        apt-get install -y ${ext_build_dependencies[@]}; \
    \
        #Build the extensions
        docker-php-ext-install curl json mbstring readline xml zip ; \
        pecl install apcu apcu_bc; \
    \
        apt-get purge -y ${ext_build_dependencies[@]}; \
        apt-get autoremove -y; \
        apt-get clean -y; \
    "]
    

如果Ubuntu 18和Debian是二进制兼容的(they're not),则可以尝试第三个选项,即使用PHP映像构建扩展,然后复制构建的扩展as the second stage of a multi-stage build。如果您的映像使用与PHP映像相同的Linux风格,则可以这样做。例如,如果您的图片基于alpine:3.8,则可以使用php:7.3-fpm-alpine3.8构建扩展并将其复制。