[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-docker-chto-takoe-sloi-obraza-image-layers":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},1082,"chto-takoe-sloi-obraza-image-layers",17,"docker","Docker","🐳","Что такое слои образа (image layers)?","Слои образа — это неизменяемые (immutable) read-only блоки файловой системы, из которых состоит Docker-образ. Каждая инструкция в Dockerfile (FROM, RUN, COPY, ADD) создаёт новый слой.\n\n### Как работают слои\n\n```\n┌──────────────────────────┐\n│   Writable Layer         │  ← Контейнер (записываемый слой)\n├──────────────────────────┤\n│   ENTRYPOINT java -jar   │  ← Только метаданные (не создаёт слой)\n├──────────────────────────┤\n│   COPY app.jar           │  ← Слой 3\n├──────────────────────────┤\n│   RUN apt-get install    │  ← Слой 2\n├──────────────────────────┤\n│   FROM ubuntu:22.04      │  ← Слой 1 (базовый образ)\n└──────────────────────────┘\n```\n\n### Кэширование слоёв\n\nКэширование слоёв — одна из ключевых оптимизаций Docker. При повторной сборке Docker проверяет, изменилась ли инструкция и её контекст. Если нет — используется кэшированный слой. Но если один слой инвалидируется, все последующие слои тоже пересобираются.\n\n### Оптимальный порядок инструкций\n\n```dockerfile\n# Плохо: любое изменение в исходном коде инвалидирует кэш зависимостей\nCOPY . \u002Fapp\nRUN mvn package\n\n# Хорошо: зависимости кэшируются отдельно\nCOPY pom.xml \u002Fapp\u002F\nRUN mvn dependency:go-offline\nCOPY src \u002Fapp\u002Fsrc\nRUN mvn package\n```\n\n### Разделение слоёв между образами\n\nСлои разделяются между образами: если два образа используют одну базу (`FROM eclipse-temurin:17-jre-alpine`), базовый слой хранится на диске только один раз.\n\n> **На собеседовании:** покажите понимание двух вещей: (1) слои неизменяемы и кэшируются, (2) инвалидация одного слоя каскадно пересобирает все последующие. Отсюда правило: инструкции, которые меняются реже (зависимости), должны идти перед теми, которые меняются чаще (исходный код).","","middle",[15,16,17,7],"optimization","image-layers","caching",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"Слои образа Docker (image layers) и кэширование — Gymterview","Слои Docker-образа: immutable read-only блоки файловой системы. Кэширование слоёв, каскадная инвалидация, оптимальный порядок инструкций в Dockerfile.","Слои образа Docker: устройство и кэширование — Gymterview","Как устроены слои Docker-образа: неизменяемые read-only блоки, кэширование при сборке и правило оптимального порядка инструкций.",[26,27,28,29,30,31,32,33],"Docker слои","image layers","кэширование слоёв","Docker кэш","writable layer","инвалидация кэша","оптимизация Dockerfile","собеседование","Слои образа — неизменяемые (immutable) read-only блоки файловой системы. Каждая инструкция FROM, RUN, COPY, ADD создаёт новый слой. При повторной сборке Docker использует кэшированные слои, если инструкция не изменилась. Инвалидация одного слоя каскадно пересобирает все последующие. Правило: инструкции, которые меняются реже (зависимости), должны идти перед часто меняющимися (исходный код). Слои разделяются между образами с одной базой.",true]