TGViewer
DevOps | Вопросы собесов DevOps | Вопросы собесов @easy_devops · 5.57K subscribers
Post #2834 750
🤔 Как оптимизировать имедж?

Оптимизация Docker-имеджа (или другого контейнерного имеджа) необходима для уменьшения его размера, ускорения сборки, повышения безопасности и повышения производительности контейнеров.

🟠Используйте минимальную базовую ОС
Почему: Базовый образ сильно влияет на размер. Например, alpine занимает ~5 МБ, в то время как ubuntu или debian могут превышать сотни мегабайт.
Как: Замените базовый образ:
FROM alpine:latest


🟠Удаляйте ненужные файлы
Почему: Временные файлы, кэш или артефакты сборки занимают место.
Как: Добавьте команды для очистки временных данных:
RUN apt-get update && apt-get install -y curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*


🟠Используйте многоэтапную сборку (multi-stage builds)
Почему: Стадия сборки может содержать инструменты, которые не нужны в финальном образе.
Как
# Стадия сборки
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o app .

# Финальный образ
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]


🟠Минимизируйте количество слоёв
Почему: Каждый RUN, COPY, ADD создаёт новый слой. Слишком много слоёв увеличивают размер образа.
Как: Объединяйте команды:
RUN apt-get update && apt-get install -y curl wget \
&& apt-get clean && rm -rf /var/lib/apt/lists/*


🟠Не сохраняйте секреты
Почему: Переменные окружения с паролями или токенами могут быть случайно унаследованы.
Как: Используйте Docker secrets или .env-файлы и исключайте их из COPY
ENV APP_ENV=production


🟠Кэшируйте зависимости
Почему: Частое скачивание зависимостей замедляет сборку.
Как: Переносите команды загрузки зависимостей ближе к началу:
COPY go.mod go.sum ./
RUN go mod download


🟠Проверяйте зависимости
Почему: Устаревшие или ненужные зависимости увеличивают размер и могут содержать уязвимости.
Как: Используйте сканеры вроде Trivy или Docker Scan для анализа.
trivy image myimage:latest


🚩Пример полного Dockerfile

# 1. Используем минимальный базовый образ
FROM node:20-alpine as builder

# 2. Устанавливаем зависимости
WORKDIR /app
COPY package*.json ./
RUN npm install

# 3. Копируем код
COPY . .

# 4. Собираем проект
RUN npm run build

# Финальный минимальный образ
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
More from @easy_devops
  1. Oct 10, 2026🤔 Если удалить terraform.tfstate, а потом сделать terraform init — что будет? - terraform…
  2. Oct 10, 2026🤔 Что касается безопасности где хранить переменные секреты? Хранение секретных переменных…
  3. Oct 9, 2026🤔 Можно ли на лету изменить настройки DNS в контейнере через CLI? Да, можно: docker exec…
  4. Oct 9, 2026Post #2894
  5. Oct 9, 2026🤔 Из чего состоит ELK стек? ELK (Elasticsearch, Logstash, Kibana) – это стек для сбора, о…
  6. Oct 8, 2026🤔 На CentOS Linux ceilings — он везде отключён или активен? Скорее всего, имеется в виду…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →