Слои образов в Docker
Аналогия слоев
Многослойный торт
В многослойном торте каждый слой - это отдельный компонент, который добавляется один за другим, чтобы создать финальный продукт. В отдельности каждый слой в торте может не представлять особого интереса у потребителя, а вот торт - уже другое дело.
Вот как это можно сопоставить со слоями в Docker:
-
Корж - базовый слой, на который добавляются компоненты (например, крем, фрукты и т.д.).
В Docker это аналогично базовому образу, поверх которого строится новый образ.
-
Крем - следующий слой. Кто-то может изменить состав крема или его цвет, но корж, на котором этот крем находится не меняется.
В Docker это аналогично созданию нового слоя, когда в базовый образ добавляется или изменяется файл.
-
Украшения - дополнительные слои, которые делают торт более привлекательным. Каждый может разукрасить торт по-своему, при этом предыдущие слои не затрагиваются.
В Docker это аналогично созданию еще одного нового слоя поверх предыдущего.
-
Готовый торт - все слои, уложенные друг на друга в определенной последовательности. Каждый из них по прежнему уникален. Каждый из слоев можно использовать в других вариантах торта.
В Docker это аналогично готовому образу, который является полноценным и функциональным.
Палитра цветов
Художник может смешивать цвета. Он может заранее подготовить смешанные цвета и использовать их, когда они ему понадобятся. Смесь цветов - новый цвет - аналог нового слоя в Docker.
Программирование
-
Программисты пишут код, используя функции, которые позволяют избежать дублирование кода. В данном случае функцию можно считать за слой в Docker.
-
Также часто в программировнии используются готовые библиотеки/фреймворки. В одном проекте их может использоваться несколько - получается тоже аналогия слоев.
Основные особенности слоев
Исходя из примеров выше можно уже догадаться о некоторых особенностях.
-
Иерархия. Каждый слой представляет собой изменение по сравнению с предыдущим. Например, если добавляется файл или устанавливается программа, то создается новый слой поверх предыдущего.
-
Кэширование. Используется для ускорения сборки образов. Если изменяется только один слой, Docker может повторно использовать все остальные слои, которые не изменились, что значительно ускоряет процесс сборки новых образов.
-
Совместное использование. Слои могут быть использованы несколькими образами. Если два образа используют один и тот же слой, Docker хранит только одну его копию на диске, что приводит к значительной экономии места при большом количестве образов.
-
Неизменяемость. После создания слоя его нельзя изменить. Если нужно внести изменения в образе, то будут созданы новые слои, начиная с того, где произошли изменения.
-
Прозрачность. Слои позволяют легко отслеживать изменения и управлять версиями, так как каждый слой представляет собой конкретный шаг в процессе сборки.