Как устроены слои Docker-образа и почему образ — неизменяемый артефакт?
- Чем образ отличается от контейнера?
- Почему удаление файла в следующем слое не уменьшает образ?
Образ — стопка слоёв только для чтения, каждый — изменения файловой системы от одной инструкции. Контейнер добавляет сверху тонкий слой для записи. Слои общие между образами и кэшируются. Удаление файла в следующем слое лишь скрывает его — в образе он остаётся, поэтому секрет, попавший в слой, утёк навсегда.
- Образ идентифицируется digest (хеш содержимого) — одинаковый digest значит тот же образ
- Изменения внутри работающего контейнера теряются при пересоздании — данные хранят в томах
- Один образ продвигают по окружениям: dev → staging → prod
А ещё Тег (latest, v1.2) — подвижный указатель, digest — неизменный
Подробно
Union filesystem (overlayfs) складывает слои: верхний перекрывает нижние. Чтение ищет файл сверху вниз; запись в контейнере копирует файл в верхний слой (copy-on-write).
Следствия:
- размер образа — сумма слоёв; временные файлы удалять в той же инструкции, где создали;
- десять сервисов на одном базовом образе хранят базовые слои один раз;
- контейнер — эфемерный: логи пишут в stdout, данные — в тома или во внешние хранилища.
Неизменяемый артефакт. Собрали образ один раз в CI, проверили тестами — и именно этот digest выкатывают на staging и prod. Пересборка «для прода» даёт другой образ (другие версии пакетов) и обесценивает тесты. Конфигурация окружения передаётся переменными и конфигами, а не вшивается в образ.
Что хотят услышать
- Слои, только чтение и слой записи контейнера.
- Почему удаление в следующем слое не помогает.
- Неизменяемый образ и digest.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Образ — стопка изменяемых слоёв: удаление файла в следующем слое физически убирает его из образа, поэтому случайно добавленный секрет можно просто удалить
- ✗Контейнер изменяет слои образа напрямую
- ✓Образ — стопка слоёв только для чтения; удаление файла в следующем слое лишь скрывает его, поэтому секрет в слое утёк навсегда
- ✗Слои не кэшируются между сборками
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.