что такое dev суфикс (freetype и freetype-dev) и как понять какую версию ставить (я ставил методом тыка, когда получал ошибки и гуглил)
Dev суффикс означает, что в данном пакете присутствуют файлы, необходимые для компиляции кода, использующего устанавливаемую библиотеку. Устанавливать нужно обе версии. Обычная версия "freetype" содержит саму библиотеку в so файле, которую gd будет подключать в рантайме. Dev версия "freetype-dev" нужна для сборки самого gd, так как модуль собирается из исходников.
почему, например, для mycrypt мне сперва нужно загрузить именно libmcrypt-dev, потом через pecl скачать mcrypt, а потом через алиас docker-php-ext-enable включить (экспериментировал и не работает с другими сценариями), а если смотреть на opcache, тот тут сразу docker-php-ext-install и все, а xdebug еще один сценарий: pecl -> docker-php-ext-enable - почему все по разному, как это понять?
Для разных модулей требуются разные сторонние библиотеки. Для gd это freetype (для работы со шрифтами), libpng (для поддержки формата png), libjpeg-turbo (для поддержки jpeg). У opcache таких зависимостей нет, поэтому ничего дополнительно устанавливать не требуется.
в чем отличие этих сценариев установки расширений (что делает каждая команда, простыми словами)?
У php есть модули, которые поставляются с самим php. Например: zip, opcache, pdo_mysql, intl. Такие модули устанавливаются специально предусмотренным для этого скриптом
docker-php-ext-install. Этот скрипт распаковывает исходники php, собирает запрошенные вами модули, копирует их в
/usr/local/lib/php/extensions/no-debug-non-zts-20190902 (в других образах php путь может отличаться), прописывает загрузку модуля в ini и удаляет распакованные ранее исходники. То есть под капотом скрипт
docker-php-ext-install вызывает скрипты
docker-php-source,
docker-php-ext-configure,
docker-php-ext-enable.
А есть модули, которые хостятся отдельно на сайте
pecl.php.net. Это официальный репозиторий, где хостятся всякие разные сторонние модули типа mcrypt, imagick, xdebug. Для их установки нужно использовать утилиту
pecl. Так как
pecl автоматически не включает модули в ini, из-за этого необходимо самому включать их при помощи скрипта
docker-php-ext-enable.
нагуглил что
docker-php-source - создает /usr/src/php
Ещё распаковывает туда исходники самого php и поставляемых с ним модулей.
docker-php-ext-install - скачивает (ОТКУДА?)
Из архива
/usr/src/php.tar.xz
docker-php-ext-configure- конфигурирует перед установкой (что это значит?)
Этот скрипт настраивает настройки, с которыми будет скомпилирован модуль. Например, тот же gd можно собрать без поддержки jpeg если сконфигурировать без опции
--with-jpeg. Нужно ли запускать
docker-php-ext-configure так же зависит от того, что написано в документации. Очень мало модулей требует предварительной конфигурации перед установкой. Мне на ум приходит только gd.
В целом, официальная документация php вам поможет понять каким способом нужно устанавливать модули. Смотрим раздел
requirements. Если написано "This extension is bundled with PHP", значит нужно устанавливать при помощи скрипта
docker-php-ext-install. Если
написано что-то вроде "This PECL extension is not bundled with PHP", значит нужно устанавливать через
pecl.
Независимо от способа установки, нужно всегда устанавливать библиотеки, от которых зависят конкретные нужные вам модули. Например, в том же
imagick написано "ImageMagick >= 6.2.4 is required". Это значит, что нужно установить библиотеку imagemagick. В вашем базовом образе на основе alpine 3.16 в репозиториях ОС присутствует версия 7.1.0, которая подходит под условие
>= 6.2.4:
/var/www/html # apk info imagemagick
imagemagick-7.1.0.35-r0 description:
Collection of tools and libraries for many image formats
imagemagick-7.1.0.35-r0 webpage:
https://imagemagick.org/
imagemagick-7.1.0.35-r0 installed size:
4664 KiB
Для
intl нужна "ICU library, version 4.0.0 or newer". Такая библиотека тоже присутствует в репозиториях альпины:
/var/www/html # apk info icu
icu-71.1-r2 description:
International Components for Unicode library
icu-71.1-r2 webpage:
https://icu.unicode.org/
icu-71.1-r2 installed size:
796 KiB
Dev версии библиотек нужны только в момент установки модулей. Дальше их желательно удалить, чтобы уменьшить размер вашего образа.