在哪里存储docker php ext文件?

在哪里存储docker php ext文件?,php,docker,dockerfile,Php,Docker,Dockerfile,我已经在Docker容器中设置了一个Symfony4项目 我跟着他们使用的地方走 一切都很完美,但速度很慢。因此,我想加快速度,启用opcache并对其进行配置 我在网上找到了有用的链接。因此,我在Dockerfile中添加了以下内容: RUN docker-php-ext-configure opcache --enable-opcache \ && docker-php-ext-install opcache # Copy configuration COPY config/

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

我跟着他们使用的地方走

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

我在网上找到了有用的链接。因此,我在Dockerfile中添加了以下内容:

RUN docker-php-ext-configure opcache --enable-opcache \
&& docker-php-ext-install opcache
# Copy configuration
COPY config/opcache.ini $PHP_INI_DIR/conf.d/
问题是我没有以下帮助脚本:

  • docker php ext配置
  • docker php ext安装
  • docker php外部启用
所以我决定在互联网上搜索它,并将其复制到我的项目中

现在我把它放在docker目录的php fpm文件夹中

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

COPY bin /usr/local/bin


还有其他我忘记做的步骤吗,比如在某处注册这些脚本?

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

COPY bin /usr/local/bin
现在,当您尝试使用该图像时,脚本将位于可执行文件路径中

然而 您找到的那些
docker php ext-*
脚本来自并打算与这些图像一起使用

您正在使用
phpdockerio/php73 fpm:latest
图像。这些脚本在很大程度上依赖于PHP DockerFile,后者执行一系列准备步骤,例如。让这些脚本直接在
phpdockerio
容器中运行将是一个非常复杂的过程

这给您留下了两个选择:

  • 放弃脚本,安装Ubuntu的预构建包。您可以安装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中

  • 切换到使用正式的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; \
    "]
    

  • 如果Ubuntu18和Debian是二进制兼容的(),那么您可以尝试第三种选择,即使用PHP映像构建扩展,然后复制构建的扩展。如果您的映像使用与PHP映像相同的Linux风格,这将是可能的。例如,如果您的图像基于
    alpine:3.8
    ,您可以使用
    php:7.3-fpm-alpine3.8
    构建扩展并复制它们。

    Wow。我申请你详细的答复。太好了。我会努力让第二种方法发挥作用。希望这对我来说不会很难。我对所有这些linux服务器的东西都是新手。