Comments 26
Работа колоссальная. Сначала принесли Докер, потом оказалось, что нужно здравый смысл, и теперь здравый смысл хаками патчится в Докер.
У вас получилась обычная ОС, в которой операторы следят за ОС, а приложение деплоится поверх.
… Интересно, а можно ли убедить докер, использовать rootfs сервера в качестве basic layer?
Пройтись по всем серверам и сделать apt upgrade.
Вопрос больше чем не подошли мультистэйджинг сборки (а по-факту то что описано — оно и есть) — стейдж сборки приложения кеширован будет, а база+копирование из стейджа сборки результата, динамически слинкованного на «базовые либы» пересобирается. При этом, конечно, нельзя забывать про то что ABI базы должен не ломаться…
Готовы рисковать — ну ок, а ребята поступили в целом правильно и здраво — нет смысла пересобирать что уже собрано, если ABI «базы» не сломан.
Ну переделка оно «такое», я не знаю ваших деталей в части объемом — не могу и судить что выйгрышнее — свой велик или «студент на переделку». Вам де-факто и пришлось распортрошить докер файл на «стейджи».
Вопрос больше чем не подошли мультистэйджинг сборки (а по-факту то что описано — оно и есть)
Не совсем так.
multistage-build — часть процесса сборки образа.
В описанном же в статье методе — image rebase сборки образа как такового нет.
Изменяеются только ссылки на слои в манифесте образа, что и даёт существенный выигрыш.
Пусть build юзает ubuntu:18-04, и out его же.
Я меняю out в части FROM ubuntu:18-10.
У меня НЕ будет пересборки build, а будет взят кеш и out будет на него «ссылаться».
И чем это отличается от «я сам руками правлю манифест» по-факту?
UPD: а ну ок, вы ведёте речь про то что ковыряете сам registry, без условного 'docker build...'.
Насчет формата стораджа – вряд ли его так легко сломают, так как формат манифеста специфицирован и поддерживается не только Docker. Мы, например, в рантайме используем Podman для запуска контейнеров. Что-то менять с хранением манифестов в реестре в ближайшем будущем не планируем.
Вопрос больше чем не подошли мультистэйджинг сборкитак если меняется базовый, самый верхний, то чем мультистейдж поможет? Он и пойдет все пересобирать.
И этим решением вы полностью ломаете концепцию идемпотентности докер образов.
Есть сервисы, не содержащие бизнес-логики (например, хранилища): их написали один раз, они работают, и лишь изредка в них вносят какие-то фиксы. Ждать планового апдейта для них очень долго.
… которые были скомпилированы под старые версии библиотек. Будут веселые поиски багов, когда однажды обновится библиотека с потерей бинарной совместимости.
А http://buildpacks.io рассматривали?
Спасибо большое за статью, я выполнял другую задачу, но в процессе наткнулся на вашу статью и она очень помогла разобраться в устройстве Container Registry.
В русскоязычном сегменте аналогов не видел, в официальной доке есть описание, но оно довольно путанное и нет схем, что очень сильно усложняет понимание.
«Восстание машин» часть 1: continuous delivery для базовых Docker образов