【问题标题】:Where to store the docker-php-ext files?在哪里存储 docker-php-ext 文件?
【发布时间】:2019-01-26 18:46:44
【问题描述】:

我已经在 Docker 容器中建立了一个 Symfony4 项目。

我关注了Jobeet-Tutorial,他们使用the phpdocker.io - generator

一切都很完美,但速度很慢。所以我想加速并启用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-configure
  • docker-php-ext-install
  • docker-php-ext-enable

所以我决定在互联网上搜索并将其复制到我的项目中。

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

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

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

【问题讨论】:

    标签: php docker dockerfile


    【解决方案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 Dockerfiles,它会执行一系列准备步骤,例如 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 构建您的扩展并复制它们。

    【讨论】:

    • 哇。我应用您的详细回答。那太棒了。我将尝试使第二种方式起作用。希望这对我来说不会太难。我对所有这些 linux - 服务器都是新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多