Version 5 (modified by 9 years ago) ( diff ) | ,
---|
Cборка rootfs
Процесс сборки имиджа состоит из двух фаз:
- сборка файлового дерева (root file system, rootfs)
- упаковка rootfs и вместе с конфигурационной информацией в файл.
В этом документе речь пойдет только о фазе сборки rootfs
Минимальный имидж
В Докере имидж "билдит сам себя". То есть, берётся базовый имидж, в него добавляются билд-тулзы, затем добавляются исходники, выполняется компиляция и добавляются результаты билда. И всё это заливается на продакшен.
Я же хочу заливать только результаты билда и их зависимости, отказавшись от использования базового имиджа и заливки билд-тулзов, а также вынеся компиляцию в отдельный контейнер, о котором продакшен ничего не знает.
Структура контейнеров и инкрементальных имиджей
Будет два контейнера:
- контейнер сборки
- контейнер продакшена
И 2 иерархии имиджей:
- иерархия сборки
- корневой имидж
- билд-имидж ноды (нода + gcc/node-gyp)
- билд-имидж приложения
- иерархия продакшена
- нода
- системные зависимости нодовских либ
- node_modules
- приложение
Идея в том, что "промежуточные" имиджи делаются один раз и являются опенсорсными (все имиджи выше кроме имиджа и билд-имиджа приложения).
Корневой имидж
Задача корневого имиджа - собирать другие имиджи. Хочу использовать существующую инфраструктуру, т.е. не лепить dependency management и config file generation из говна и палок, а использовать:
- готовый package manager
- готовый configuration manager
Configuration manager хочу декларативный (по идее нет еботни с порядком), из популярных такой один - puppet. Вопрос только в том, насколько удастся очистить имидж приложения от следов паппета (который для продакшена в общем случае не нужен).
По идее, package manager должен использоваться не напрямую, а через configuration manager.
Билд-имиджи стеков
Предполагается, что будут билд-имиджи "для ноды" и "для хаскеля".
Соответственно, они будут искать package.json и *.cabal в предопределённом каталоге, и собирать по ним:
- билд-имидж приложения (с целью кеширования - чтоб не пересобирать зависимости)
- иерархию продакшена
- нода (берется готовый опенсорсный имидж)
- системные зависимости (кеш)
- node_modules (кеш)
- приложение