Получить доступ

Как устроены слои Docker-образа и почему образ — неизменяемый артефакт?

JuniorDocker и контейнерыDocker
Ещё спрашивают так:
  • Чем образ отличается от контейнера?
  • Почему удаление файла в следующем слое не уменьшает образ?
Коротко

Образ — стопка слоёв только для чтения, каждый — изменения файловой системы от одной инструкции. Контейнер добавляет сверху тонкий слой для записи. Слои общие между образами и кэшируются. Удаление файла в следующем слое лишь скрывает его — в образе он остаётся, поэтому секрет, попавший в слой, утёк навсегда.

  • Образ идентифицируется digest (хеш содержимого) — одинаковый digest значит тот же образ
  • Изменения внутри работающего контейнера теряются при пересоздании — данные хранят в томах
  • Один образ продвигают по окружениям: dev → staging → prod

А ещё Тег (latest, v1.2) — подвижный указатель, digest — неизменный

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Union filesystem (overlayfs) складывает слои: верхний перекрывает нижние. Чтение ищет файл сверху вниз; запись в контейнере копирует файл в верхний слой (copy-on-write).

Следствия:

  • размер образа — сумма слоёв; временные файлы удалять в той же инструкции, где создали;
  • десять сервисов на одном базовом образе хранят базовые слои один раз;
  • контейнер — эфемерный: логи пишут в stdout, данные — в тома или во внешние хранилища.

Неизменяемый артефакт. Собрали образ один раз в CI, проверили тестами — и именно этот digest выкатывают на staging и prod. Пересборка «для прода» даёт другой образ (другие версии пакетов) и обесценивает тесты. Конфигурация окружения передаётся переменными и конфигами, а не вшивается в образ.

Что хотят услышать

  • Слои, только чтение и слой записи контейнера.
  • Почему удаление в следующем слое не помогает.
  • Неизменяемый образ и digest.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем