Уменьшение размера образов с помощью 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 — локальная установка не требуется.
Все уроки этого курса
- Многоэтапные сборки для повышения эффективности
- Использование кэширования сборки
- Лучшие практики безопасности Dockerfile
- Уменьшение размера образов с помощью Slim и Distroless