0Pricing
DevOps Bootcamp · Урок

Уменьшение размера образов с помощью Slim и Distroless

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

«Уменьшение размера образов с помощью Slim и Distroless» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

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

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

Выбор компактного базового образа

Образы по умолчанию удобны, но имеют большой размер. Замена node:20 (около 1 ГБ) на node:20-slim или node:20-alpine может сразу сократить размер на сотни мегабайт.

FROM node:20-slim

Компромиссы Alpine

Alpine занимает мало места, но использует musl libc вместо glibc, из-за чего иногда возникают проблемы с двоичными файлами. Тщательно тестируйте результат: иногда -slim является более безопасным компактным вариантом.

FROM python:3.12-alpine

Объединение слоёв RUN

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

RUN apt-get update \
 && apt-get install -y curl \
 && rm -rf /var/lib/apt/lists/*

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

Файл .dockerignore не допускает попадания лишних данных в контекст сборки: node_modules, .git и журналов. Меньший контекст означает более быстрые сборки и более компактные слои.

# .dockerignore
.git
node_modules
*.log

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

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

FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app

FROM alpine:3.20
COPY --from=build /src/app /app

Знакомство с Distroless

Distroless-образы содержат только Ваше приложение и среду его выполнения — без оболочки, менеджера пакетов и дополнительных двоичных файлов. Они занимают мало места и усложняют эксплуатацию уязвимостей.

FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

Нет оболочки — нет проблем

В Distroless нет оболочки, поэтому команды RUN и docker exec sh работать не будут. Выполните всю настройку на предыдущих этапах; если необходимо заглянуть внутрь, используйте тег :debug.

Базовый образ scratch

Для полностью статических двоичных файлов (Go, Rust) конструкция FROM scratch добавляет только исполняемый файл — обычно общий размер составляет всего несколько мегабайт.

FROM scratch
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]

Оценка результатов

Используйте docker images, чтобы сравнить размеры, а docker history — чтобы увидеть, какие слои самые большие. Сначала оптимизируйте самые объёмные слои.

docker history myapp:latest

Фиксируйте версии, а не latest

Фиксация конкретного тега или дайджеста делает сборки воспроизводимыми и предотвращает неожиданные скачки размера при изменении вышестоящего latest.

FROM node:20.11.1-slim

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

Что особенного в образе без дистрибутива?

Итоги

Теперь Вы умеете значительно уменьшать размер образов:

  • Выбирайте базовые образы -slim, -alpine, distroless или scratch
  • Объединяйте и очищайте слои RUN; используйте .dockerignore
  • Многоэтапные сборки исключают набор инструментов
  • Измеряйте размеры с помощью docker history и фиксируйте версии

Меньшие образы означают более быстрые и безопасные развёртывания.

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

Урок «Уменьшение размера образов с помощью Slim и Distroless» бесплатный?

Да — полный текст урока «Уменьшение размера образов с помощью Slim и Distroless» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Уменьшение размера образов с помощью Slim и Distroless»?

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

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

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

Сколько времени занимает урок «Уменьшение размера образов с помощью Slim и Distroless»?

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

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

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

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

  1. Многоэтапные сборки для повышения эффективности
  2. Использование кэширования сборки
  3. Лучшие практики безопасности Dockerfile
  4. Уменьшение размера образов с помощью Slim и Distroless
← Назад к DevOps Bootcamp