0Pricing
Docker & DevOps Fundamentals · Урок

Многоэтапные сборки и уменьшение образов

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

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

Почему размер образа важен

Большие образы медленнее собирать, отправлять и загружать, а также они увеличивают поверхность атаки. Хорошая цель при разработке — выпускать самый маленький образ, в котором приложение всё ещё работает.

Проблема избыточного размера

Для сборки приложения часто требуются компиляторы, зависимости для разработки и инструменты сборки. Если они попадут в итоговый образ, его размер значительно увеличится, хотя работающему приложению они не нужны.

Что такое многоэтапная сборка?

Многоэтапная сборка использует несколько инструкций FROM в одном Dockerfile. На ранних этапах собирается приложение, а на последний этап копируются только готовые артефакты, поэтому инструменты сборки остаются за его пределами.

Именование этапа

Задайте этапу имя с помощью AS, чтобы последующие этапы могли ссылаться на него.

FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci

Сборка на первом этапе

На этапе сборки приложение компилируется или объединяется в пакет. Здесь доступны все зависимости и инструменты для разработки.

COPY . .
RUN npm run build

Компактный последний этап

Начните последний этап с минимального базового образа, а затем скопируйте только необходимое для работы приложения с помощью COPY --from.

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules

Полный многоэтапный Dockerfile

Объединение этапов создаёт небольшой итоговый образ, содержащий собранное приложение, но не содержащий набор инструментов сборки.

FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ['node', 'dist/main.js']

Выбор небольшого базового образа

Базовый образ часто сильнее всего влияет на размер. Варианты Slim и Alpine значительно уменьшают размер образов:

  • node:20 ~ большой
  • node:20-slim ~ значительно меньше
  • node:20-alpine ~ самый маленький, с минимумом библиотек

Только зависимости для рабочей среды

Не включайте зависимости для разработки в образ рабочей среды. Установка с флагом рабочей среды не позволяет пакетам для тестирования и сборки попасть в образ.

RUN npm ci --omit=dev

Использование .dockerignore

Файл .dockerignore исключает ненужные данные из контекста сборки, ускоряет сборку и предотвращает случайное копирование секретов или огромных каталогов.

node_modules
.git
.env
Dockerfile
*.log

Измерение результата

Проверьте результат, сравнив размеры образов. Хорошо созданный многоэтапный образ может занимать лишь небольшую долю размера наивного одноэтапного образа.

docker images myapp

Быстрая проверка

Проверьте свои знания о многоэтапной сборке.

Итоги

Вы научились создавать компактные образы Docker:

  • В многоэтапных сборках в одном Dockerfile используется несколько этапов FROM
  • Сборка выполняется на раннем этапе, затем только артефакты копируются с помощью COPY --from на компактный последний этап
  • Выбирайте небольшие базовые образы (Slim или Alpine) и устанавливайте только зависимости для рабочей среды
  • Используйте .dockerignore, чтобы уменьшить контекст сборки

Небольшие образы быстрее собираются и развёртываются, а также безопаснее.

Часто задаваемые вопросы

Урок «Многоэтапные сборки и уменьшение образов» бесплатный?

Да — полный текст урока «Многоэтапные сборки и уменьшение образов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Многоэтапные сборки и уменьшение образов»?

Узнайте, как многоэтапные Dockerfile позволяют поставлять компактные рабочие образы, отделяя инструменты сборки от конечной среды выполнения и значительно уменьшая размер образа. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?

Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Многоэтапные сборки и уменьшение образов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?

Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Понимание Dockerfile
  2. Создание пользовательских образов Docker
  3. Слои образа и оптимизация
  4. Многоэтапные сборки и уменьшение образов
← Назад к Docker & DevOps Fundamentals