Как говорится, нет покоя стебанутым. И даже несмотря на то, что и на работе, и дома у меня сейчас используется вовсе не Gentoo, а ArchLinux, а ещё на работе в LXC-контейнерах используется Funtoo, я замыслил недоброе: маленький контейнер с Apache и mod_php на основе Gentoo. Небольшой список часто задаваемых вопросов и ответов, которые на самом деле никто мне вообще не задавал, а я сам их только что выдумал, сам ответил и сам молодец:
-
В: Набуя?
-
О: Надо по работе.
-
В: Как вообще дошло до жизни такой?
-
О: Поставлена задача сделать образ на основе PHP 5.6, а в Ubuntu LTS, которую мы использовали, было 5.5. К тому же, я не люблю Ubuntu.
-
В: Почему Apache?
-
О: 1) legacy 2) mod_rewrite.
-
В: Почему PHP?
-
О: 1) legacy 2) BDSM.
-
В: Почему Docker?
-
О: Потому что я могу.
-
В: Почему Gentoo?
-
О: Потому что я могу.
-
В: Но в Gentoo же куча ненужного фекального говна?
-
О: Образы собираются минимальные, без gcc, блэкджека и куртизанок
Вообще, в мире Docker, есть, я бы сказал, несколько стандартов “де-факто”:
- busybox, с ним всё и так понятно. Когда не нужно вообще ничего, кроме готового бинарника (привет, Go!)
- Ubuntu, с ним тоже всё понятно. Куда ж нынче без Ubuntu. Как говаривал старик Жириновский — тут Ubuntu, там Ubuntu, везде Ubuntu.
- Debian, на котором основывают свои образы (обычно) мои соратники-убунтофобы. Как известно, все мы латентные убунтолюбы, просто свою любовь тщательно скрываем. И вообще, один раз не убунтолюб.
- CentOS, с которым вообще всё непонятно. Большой, древний, неповоротливый, но у него есть преданные фанаты.
Вот мы решили выпендриться, и перевестись с ubuntu:latest на gentoo. Почему не на Alpine? В ЧАВО такого не было, так что думайте сами :D
В помощь мне оказался немец, который делает проект gentoo-bb, я основывался на его образах. Насколько я могу судить, идея предельно проста и элегантна. Сначала собирается базовый образ Gentoo, на основе stage3. Уже от него наследуется образ-сборщик (в котором установлен gcc и компания), и образ-цель, в который поступает из образа-сборщика только лишь собранный пакет. В итоге и всё довольно быстро происходит, и без мусора. Красота-то какая! Лепота!
Итак, вкратце опишу ход моих действий. В первую очередь нам понадобятся стандартные сборщики gentoo-bob, gentoo-bob-musl и т.п. Поэтому я просто запускаю build.sh
, и начинаю разработку. Нам понадобится создать пространство имён bytex
, для этого я создаю каталог bytex
внутри dock
. Наши образы начинаются с bytex/
, чтобы ни с кем не перепутать :). Все дальнейшие повествования относятся к тому, что происходит внутри каталога gentoobb/dock/bytex
. Добавим в images
новый каталог apache-php56
. Сделаем в нём конфиг Buildconfig.sh
. Вот его содержимое:
PACKAGES="dev-lang/php:5.6"
configure_bob() {
echo CONFIGURE BOB
mkdir -p /etc/portage/package.{accept_keywords,unmask,mask,use}
update_use 'dev-lang/php' '+apache2 +mysql +mysqli'
update_use 'app-eselect/eselect-php' '+apache2'
}
Прерываем сборку в первой вкладке, и уже начинаем сборку пространства имён bytex
:
./build.sh -s build bytex
Сборка может продолжаться несколько часов, т.к. хотя собирается и, гм, несколько обрезанная Gentoo
, но собирается она “с нуля”. Впоследствии будет использоватся кэш пакетов, будет попроще. С этим я уже столкнулся, когда выполнял пересборку образа. Работа, к сожалению, продвигается очень медленно, только когда на работе нет других,более важных дел. Обычно это выглядит примерно так: я что-то небольшое сделаю, и запускаю пересборку, возвращаясь к результатам через несколько часов. Так или иначе, первые эксперименты уже закончены и не совсем стыдно выложить самую первую версию на публичное обозрение: https://github.com/bytex/gentoo-bb
Основные отличия от оригинала: более свежая версия stage3, работает только на процессорах Intel Haswell
или более новых, адаптирован для российских, а не немецких серверов. Ну и да, конечно, внутри есть пакет bytex/apache-php56
. Не протестированный, но должен в принципе работать. Использовать его “как есть” крайне не рекомендуется, от него надо наследоваться и добавлять всяческие свои полезные штуковины.
Пост писался неспеша на протяжение трёх дней, если чего не так — извиняйте. Продолжение следует, когда доведу образ до ума, протестирую и залью в Docker Hub.