Ответ вслух Senior Образы и слои обновлено

Слои и их влияние на размер и скорость

Вопрос

Как устроены слои образа и как это влияет на размер образа, скорость сборки и деплоя?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образ это стопка слоёв. Инструкции, которые меняют файловую систему, RUN, COPY, ADD, создают новый слой, где записана только разница.

Что должно прозвучать в ответе

  • Каждая инструкция, меняющая ФС (`RUN`, `COPY`, `ADD`), создаёт слой с разницей относительно предыдущего

  • Слои неизменяемы и адресуются хешем, общие слои хранятся и скачиваются один раз

  • Удаление в следующем слое не уменьшает образ, чистить надо в той же инструкции

  • Кеш сборки: при изменении слоя пересобираются все последующие, поэтому редко меняющееся кладут выше

  • При деплое скачиваются только отсутствующие на узле слои

  • Multi-stage и маленькие базовые образы уменьшают итог

Что могут спросить следом

  • Почему COPY . . перед установкой зависимостей замедляет сборку?
  • Как посмотреть, какой слой самый тяжёлый?

Разбор

Образ это стопка слоёв. Инструкции, которые меняют файловую систему, RUN, COPY, ADD, создают новый слой, где записана только разница. Слои неизменяемы и адресуются хешем содержимого, поэтому одинаковые слои хранятся на узле один раз и делятся между образами. Отсюда три следствия. Размер: удалить файл, добавленный в прошлом слое, нельзя, он останется в истории, поэтому скачивание, распаковку и чистку делают в одной инструкции или выносят в отдельную стадию multi-stage. Скорость сборки: кеш работает послойно, и при изменении слоя пересобираются все последующие, поэтому сначала копируют манифесты зависимостей и ставят их, а код копируют в самом конце. Скорость деплоя: узел скачивает только отсутствующие слои, и если базовый образ и зависимости не менялись, приедет лишь тонкий слой с кодом. Тяжёлые слои видно в docker history, а подробно в утилите dive.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.