Такая оптимизация обычно достигается не одной магией, а несколькими простыми приёмами:
- multi-stage build
-
python:slim / distroless вместо тяжёлого base image- удаление build-зависимостей после сборки
- очистка
apt / pip cache-
.dockerignore для лишних файлов- установка только production-зависимостей
- объединение команд
RUN, чтобы не тащить мусор в слоиПример:
3.17 GB → 354 MBЧто это даёт:
- быстрее pull/push
- быстрее CI/CD
- меньше места в registry
- быстрее запуск новых pod
- меньше потенциальная attack surface
Перед оптимизацией полезно посмотреть, что реально раздувает образ:
docker history <image>и отдельно проверить слои через
dive.Большой Docker image почти всегда стоит сначала разобрать по слоям — часто там лежат гигабайты build-tools, cache и файлов, которые в runtime вообще не нужны.
