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

Сборка слой за слоем
Когда Вы собираете образ Docker с помощью Dockerfile, Docker выполняет каждую инструкцию построчно.
- Каждая инструкция, например
FROM,RUNилиCOPY, создаёт новый «слой» в образе. - Эти слои накладываются друг на друга, формируя итоговый образ.
Проверка кэша Docker
Перед выполнением инструкции Docker проверяет, собирал ли он раньше точно такой же слой. Он сравнивает:
- Саму инструкцию (например,
RUN apt update). - «Контекст» для определённых инструкций (например, файлы, которые копируются с помощью
COPY).
Если найден подходящий слой, Docker повторно использует его из кэша вместо повторного выполнения инструкции.
Недействительность кэша
Кэш очень полезен, но используется не всегда. Если Docker обнаруживает изменение в инструкции или её контексте, кэш этого слоя и всех последующих слоёв становится недействительным.
Это означает, что Docker выполнит сборку заново с этого места, игнорируя расположенные ниже кэшированные слои.
Умный порядок инструкций
Чтобы максимально использовать кэш, располагайте инструкции Dockerfile от наименее изменчивых к наиболее изменчивым.
- Сначала стабильные зависимости: устанавливайте системные пакеты или зависимости приложения, которые изменяются редко.
- Код приложения — в конце: копируйте исходный код приложения, который изменяется часто, как можно позже.
Порядок для попаданий в кэш
Рассмотрим пример. Если разместить команду RUN pip install (которая обычно изменяется реже) перед COPY . . (которая изменяется при каждом обновлении кода), Docker сможет повторно использовать слой зависимостей.
Представьте, что в requirements.txt указаны flask и gunicorn, а app.py — это Ваше основное приложение.
Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
CMD ["python", "app.py"]Если изменяется только app.py, Docker пересобирает только последние слои COPY и CMD, экономя время!
Выборочное копирование с помощью .dockerignore
Когда Вы используете COPY . ., Docker проверяет изменения в каждом файле контекста сборки. Даже небольшие несущественные файлы (например, папки .git или локальные данные для тестов) могут сделать кэш недействительным.
Используйте файл .dockerignore, чтобы исключить ненужные файлы и каталоги из контекста сборки. Это не позволит им вызывать недействительность кэша.
.dockerignore в действии
Поместите файл с именем .dockerignore в корень контекста сборки (рядом с файлом Dockerfile).
Пример файла .dockerignore:
.git
.venv
__pycache__
*.log
node_modulesТеперь при использовании COPY . . Docker игнорирует эти файлы, благодаря чему попадания в кэш становятся более надёжными!
Когда следует пропустить кэш
Иногда необходимо собрать всё заново, полностью игнорируя кэш. Это может быть полезно при отладке или для гарантии использования самых последних версий зависимостей.
Вы можете принудительно пересобрать образ Docker без использования кэша, добавив флаг --no-cache к команде сборки:
docker build --no-cache -t my-app:latest .Проверка оптимизации кэша
Вы собираете образ Docker для приложения на Node.js. Сейчас Ваш файл Dockerfile выглядит так:
FROM node:16-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]Какое изменение лучше всего оптимизирует этот файл Dockerfile для кэширования сборки?
Повторение: освойте кэш!
Отличная работа! Вы научились использовать кэш сборки Docker для ускорения сборки образов.
- Docker собирает образы слой за слоем, по возможности повторно используя кэшированные слои.
- Изменения в инструкции или её контексте делают кэш недействительным начиная с этого места.
- Оптимизируйте сборку, располагая инструкции от наименее изменчивых к наиболее изменчивым.
- Используйте
.dockerignore, чтобы исключать несущественные файлы из контекста сборки. - Используйте
--no-cache, чтобы при необходимости принудительно выполнить сборку заново.
Эффективное кэширование ускоряет циклы разработки и делает развёртывание более гибким!
Часто задаваемые вопросы
Урок «Использование кэширования сборки» бесплатный?
Да — полный текст урока «Использование кэширования сборки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «Использование кэширования сборки»?
Оптимизируйте время сборки Docker, понимая механизм кэша сборки Docker и эффективно используя его. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?
Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Использование кэширования сборки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?
Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Многоэтапные сборки для повышения эффективности
- Использование кэширования сборки
- Лучшие практики безопасности Dockerfile
- Уменьшение размера образов с помощью Slim и Distroless