Docker Image Build (избавиться от зависимостей)

Я строю образ php docker из базового образа php:7.2-fpm-alpineгде требуется какое-то нестандартное расширение php.

Как и следующие команды для установки зависимостей и некоторых дополнительных расширений.

RUN apk upgrade --update && apk add libpng-dev libjpeg-turbo-dev \
freetype-dev libbz2 libxml2-dev libxml2 bzip2-dev libxslt libxslt-dev \
&& docker-php-ext-install bcmath calendar gd hash zip pdo_mysql

Так как мне нужно вручную установить зависимости для моих расширений, скомпилировал его, чтобы получить что-то вроде bcmath.so gd.so,

Я думаю, смогу ли я избавиться от этих зависимостей и просто скопировать *.so в новый образ, так как я собираюсь использовать многоэтапную сборку в Dockerfile.

Вопрос в том, можно ли избавиться от компилятора GCC + и некоторых других зависимостей (openssl, curl)? и просто скомпилировать результат с новым изображением?

1

Решение

После того, как вы скомпилировали расширения, вы должны как минимум избавиться от пакетов -dev. Пакеты -dev включают в себя такие вещи, как исходные файлы c (.h).

Итак, в вашем примере вы устанавливаете libxml2-dev и libxml2. В этом случае пакет libxml2 — это файлы, необходимые для выполнения кода, libxml2-dev — это пакет, необходимый для компиляции любого кода, использующего libxml2. Когда вы компилируете расширение для PHP, оно не включает в себя все двоичные файлы для запуска конкретной функции, оно обычно опирается на пакеты, установленные в ОС.

Вы можете избавиться от gcc и некоторых вспомогательных средств, но вам может потребоваться пройти через процесс удаления пакета, а затем протестировать, если что-то сломается.

Также возможно удалить некоторые модули из PHP, опять же, это зависит от вашего кода и того, что он делает. Хотя это выходит за рамки того, что я сделал, и я не уверен в преимуществах этого.

0

Другие решения

Создайте каталог на операционной системе хоста.
Используйте Docker Volume, чтобы смонтировать ваш каталог в контейнер, туда, где ваш * .so должен быть найден.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector