Где хранить файлы docker-php-ext? - PullRequest
0 голосов
/ 26 января 2019

Я установил проект Symfony4 в контейнере Docker.

Я следовал за Jobeet-Turotial , где они использовали phpdocker.io - генератор .

Все работает отлично, но очень медленно. Поэтому я хочу ускорить и включить opcache и настроить его.

Я нашел полезные ссылки в сети. Поэтому я добавил в свой Dockerfile это:

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

Копировать конфигурацию

COPY config / opcache.ini $ PHP_INI_DIR / conf.d /

проблема в том, что у меня нет таких помощников:

  • докер-PHP-вн-конфигурирования
  • докер-PHP-внутр установить
  • докер-PHP-внутр включить

Поэтому я решил поискать его в Интернете и скопировать в свой проект.

Теперь он у меня в папке php-fpm моего каталога докеров.

Мой каталог теперь выглядит так - скрипты находятся под Dockerfile:

enter image description here

Есть ли другой шаг, который я забыл сделать? Зарегистрировать где-нибудь эти скрипты? Или что-то еще?

Я действительно хочу использовать этот вспомогательный сценарий.

Майкл

1 Ответ

0 голосов
/ 27 января 2019

Самый быстрый ответ на ваш вопрос заключается в том, что вам нужно скопировать эти скрипты в образ Docker, который вы создаете. Для этого вам необходимо создать подкаталог в каталоге php-fpm с именем bin и поместить все эти сценарии в этот каталог. Затем в вашем Dockerfile:

COPY bin /usr/local/bin

Теперь, когда вы попытаетесь использовать этот образ, сценарии будут в вашем исполняемом файле PATH.

Однако

Найденные вами docker-php-ext-* скрипты взяты из официальных образов Docker проекта PHP и предназначены для использования с этими изображениями.

Вы используете изображение phpdockerio/php73-fpm:latest, , которое, похоже, использует ubuntu:bionic в качестве базового изображения . Эти сценарии сильно зависят от Docker-файлов PHP, которые выполняют несколько подготовительных шагов, таких как загрузка исходного кода самого интерпретатора PHP в /usr/src. Выполнение этих сценариев непосредственно в контейнере phpdockerio будет очень сложным процессом.

Это оставляет вам 2 варианта:

  1. Откажитесь от скриптов и установите готовые пакеты Ubuntu. Похоже, у вас уже установлены установленные PHP-расширения apcu, apcu-bc, cli, curl, json, mbstring, opcache, readline, xml и zip. Вы можете увидеть полный список пакетов, доступных в репозиториях по умолчанию, запустив

    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, который вы используете, - это, по сути, PHP7.3-FPM в Ubuntu, а ближайший официальный образ PHP - php:7.3-fpm-stretch (Debian 9). Вы можете собрать и установить расширения, перечисленные в Варианте 1, изменив Dockerfile PHP-FPM на:

    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 были бинарно-совместимыми ( они не ), вы могли бы попробовать третий вариант: сборка расширений с использованием образа PHP, а затем копирование поверх встроенных расширений как второй этап многоступенчатой ​​сборки . Это было бы возможно, если бы ваш образ использовал ту же версию Linux, что и образ PHP. Например, если ваше изображение основано на alpine:3.8, вы можете использовать php:7.3-fpm-alpine3.8 для создания расширений и их копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...