Skip to content

Слои образов в Docker

Аналогия слоев

Многослойный торт

В многослойном торте каждый слой - это отдельный компонент, который добавляется один за другим, чтобы создать финальный продукт. В отдельности каждый слой в торте может не представлять особого интереса у потребителя, а вот торт - уже другое дело.

Вот как это можно сопоставить со слоями в Docker:

  1. Корж - базовый слой, на который добавляются компоненты (например, крем, фрукты и т.д.).

    В Docker это аналогично базовому образу, поверх которого строится новый образ.

  2. Крем - следующий слой. Кто-то может изменить состав крема или его цвет, но корж, на котором этот крем находится не меняется.

    В Docker это аналогично созданию нового слоя, когда в базовый образ добавляется или изменяется файл.

  3. Украшения - дополнительные слои, которые делают торт более привлекательным. Каждый может разукрасить торт по-своему, при этом предыдущие слои не затрагиваются.

    В Docker это аналогично созданию еще одного нового слоя поверх предыдущего.

  4. Готовый торт - все слои, уложенные друг на друга в определенной последовательности. Каждый из них по прежнему уникален. Каждый из слоев можно использовать в других вариантах торта.

    В Docker это аналогично готовому образу, который является полноценным и функциональным.

Палитра цветов

Художник может смешивать цвета. Он может заранее подготовить смешанные цвета и использовать их, когда они ему понадобятся. Смесь цветов - новый цвет - аналог нового слоя в Docker.

Программирование

  1. Программисты пишут код, используя функции, которые позволяют избежать дублирование кода. В данном случае функцию можно считать за слой в Docker.

  2. Также часто в программировнии используются готовые библиотеки/фреймворки. В одном проекте их может использоваться несколько - получается тоже аналогия слоев.

Основные особенности слоев

Исходя из примеров выше можно уже догадаться о некоторых особенностях.

  1. Иерархия. Каждый слой представляет собой изменение по сравнению с предыдущим. Например, если добавляется файл или устанавливается программа, то создается новый слой поверх предыдущего.

  2. Кэширование. Используется для ускорения сборки образов. Если изменяется только один слой, Docker может повторно использовать все остальные слои, которые не изменились, что значительно ускоряет процесс сборки новых образов.

  3. Совместное использование. Слои могут быть использованы несколькими образами. Если два образа используют один и тот же слой, Docker хранит только одну его копию на диске, что приводит к значительной экономии места при большом количестве образов.

  4. Неизменяемость. После создания слоя его нельзя изменить. Если нужно внести изменения в образе, то будут созданы новые слои, начиная с того, где произошли изменения.

  5. Прозрачность. Слои позволяют легко отслеживать изменения и управлять версиями, так как каждый слой представляет собой конкретный шаг в процессе сборки.