Слои образа и оптимизация
Узнайте, как устроены слои образов Docker, и применяйте методы оптимизации размера образа и времени сборки.
«Слои образа и оптимизация» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Слои образа: строительные блоки
Образы Docker — это не один огромный файл. Вместо этого они состоят из последовательности слоёв, доступных только для чтения. Представьте эти слои как стопку прозрачных плёнок.
Каждый слой представляет изменение образа, благодаря чему образы остаются эффективными и гибкими. Такая слоистая структура лежит в основе работы Docker.

Инструкции Dockerfile и слои
При написании Dockerfile почти каждая инструкция создаёт новый слой поверх предыдущего. Такие инструкции, как FROM, RUN, COPY и ADD, создают новые слои.
Docker выполняет эти инструкции последовательно, создавая каждый новый слой на основе состояния предыдущего.
Просмотр истории образа
Увидеть слои, из которых состоит образ, можно с помощью команды docker history. Эта команда показывает каждую инструкцию, её размер и время создания, помогая понять, как увеличивался образ.
Это мощный инструмент для отладки проблем с размером образа.
docker history my-image:latestПреимущество кэширования слоёв
Docker использует интеллектуальный кэш сборки. Если инструкция в Dockerfile и её контекст (например, копируемые файлы) не изменились с момента последней сборки, Docker повторно использует существующий слой.
Такое повторное использование значительно ускоряет последующие сборки, поскольку Docker не нужно заново выполнять неизменившиеся шаги.
Оптимизация 1: продуманный порядок слоёв
Порядок инструкций в Dockerfile крайне важен для эффективного кэширования. Размещайте в начале инструкции, которые меняются редко (например, установку системных зависимостей).
Инструкции, которые меняются часто (например, копирование кода приложения), следует размещать ниже. Тогда при изменении только кода Docker сможет повторно использовать кэшированные слои со стабильными зависимостями.
Пример: оптимизация порядка слоёв
Сравните эти два фрагмента Dockerfile. В хорошем порядке стабильные зависимости размещены первыми, поэтому Docker может кэшировать их и пересобирать только слои с изменяющимся кодом приложения.
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]Оптимизация 2: объединение команд RUN
Каждая команда RUN обычно создаёт новый слой. Вы можете уменьшить количество слоёв и часто сократить итоговый размер образа, объединив несколько команд в одну инструкцию RUN.
Используйте оператор && \, чтобы объединить команды в цепочку и сделать их частью одного атомарного слоя.
Пример: объединение команд RUN
Вместо нескольких команд RUN объедините их в цепочку с помощью && \. Это создаёт один более эффективный слой для всех этих операций.
FROM ubuntu:latest
RUN apt-get update && \
apt-get install -y curl && \
rm -rf /var/lib/apt/lists/*
CMD ["bash"]Оптимизация 3: очистка файлов
Всегда удаляйте файлы, которые нужны только в процессе сборки. Например, кэши менеджера пакетов (такие как apt-get clean) или временные артефакты сборки могут значительно увеличить размер слоёв образа.
Очистка в той же команде RUN, которая создала эти файлы, гарантирует, что они не сохранятся в предыдущем слое.
Быстрая проверка: оптимизация образа
Рассмотрите следующий фрагмент Dockerfile:
FROM alpine:latest
COPY . /app
RUN apk add --no-cache git
RUN apk add --no-cache make
CMD ["sh"]Какое из следующих изменений лучше всего оптимизирует этот Dockerfile для уменьшения размера образа и потенциального ускорения повторных сборок?
Итоги: компактные и быстрые образы
Вы узнали, что образы Docker создаются из слоёв, причём каждая инструкция часто создаёт новый слой. Понимание этого принципа — ключ к оптимизации!
- Тщательно упорядочивайте инструкции, чтобы максимально эффективно использовать кэш сборки.
- Объединяйте несколько команд
RUNв одну, чтобы уменьшить количество слоёв. - Удаляйте временные файлы в соответствующих командах
RUN, чтобы слои оставались компактными.
Эти методы помогают создавать меньшие и быстрее собираемые образы Docker, необходимые для эффективного развёртывания.
Часто задаваемые вопросы
Урок «Слои образа и оптимизация» бесплатный?
Да — полный текст урока «Слои образа и оптимизация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Слои образа и оптимизация»?
Узнайте, как устроены слои образов Docker, и применяйте методы оптимизации размера образа и времени сборки. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Слои образа и оптимизация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Понимание Dockerfile
- Создание пользовательских образов Docker
- Слои образа и оптимизация
- Многоэтапные сборки и уменьшение образов