🔥 Как ускорить docker build и сократить размер образа
Иногда
1. Используй multistage build
Разделяй стадии сборки и финальный образ. Это особенно важно при компиляции (Go, Java, Node.js):
Образ получается меньше 10 МБ!
2. Минимизируй base image
Используй
Или вообще:
3. Правильно расставляй
Кешируй слои — сначала зависимости, потом исходники:
Так
4. Убирай мусор и временные файлы
После установки пакетов — чисти кэш:
5. Используй
Иначе в билд попадут
Вывод:
Минимизация образа — это не только про размер, но и про безопасность (меньше surface area), скорость CI/CD, стабильность. И не забывай —
#devops #docker #ci #optimization
Подпишись 👉 @i_DevOps
Иногда
docker build тянется вечность, а итоговый образ весит больше, чем база данных 🐘. Разбираемся, как ускорить сборку и оптимизировать размер образа без потери функциональности.1. Используй multistage build
Разделяй стадии сборки и финальный образ. Это особенно важно при компиляции (Go, Java, Node.js):
# Стадия 1: билд
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o app
# Стадия 2: минимальный runtime
FROM alpine:latest
COPY --from=builder /app/app /usr/local/bin/app
ENTRYPOINT ["app"]
Образ получается меньше 10 МБ!
2. Минимизируй base image
Используй
alpine, distroless, scratch, если не нужен полноценный дистрибутив:
FROM python:3.12-slim
Или вообще:
FROM scratch
3. Правильно расставляй
COPY и RUN Кешируй слои — сначала зависимости, потом исходники:
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
Так
pip install не будет повторяться при каждом изменении исходников.4. Убирай мусор и временные файлы
После установки пакетов — чисти кэш:
RUN apt-get update && apt-get install -y ... \
&& rm -rf /var/lib/apt/lists/*
5. Используй
.dockerignore Иначе в билд попадут
node_modules, .git, логи и прочее:
.git
node_modules
*.log
Вывод:
Минимизация образа — это не только про размер, но и про безопасность (меньше surface area), скорость CI/CD, стабильность. И не забывай —
docker build тоже надо профилировать.#devops #docker #ci #optimization
Подпишись 👉 @i_DevOps
👍10