1. Multi-stage builds
Позволяет собирать образы в несколько этапов, оставляя в финальном образе только нужное:
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:3.20
COPY —from=builder /app/myapp /usr/local/bin/
ENTRYPOINT [«myapp»]
🔹 Зачем: уменьшаем размер финального образа и избавляемся от лишнего ПО (компиляторов, зависимостей).
🔹 Когда: при сборке любого backend-приложения, особенно Go, Rust, Java.
2. Squash layers

Сжимает все слои в один, уменьшает вес:
export DOCKER_BUILDKIT=1
docker build —squash -t myapp:latest .
🔹 Зачем: компактные образы для продакшена.
🔹 Минус: ухудшает повторное использование кэша.
3. BuildKit Secrets

Встраиваем секреты во время сборки:
docker build —secret id=token,src=$HOME/.ssh/id_rsa .
dockerfileКопироватьРедактировать# syntax=docker/dockerfile:1.5RUN —mount=type=secret,id=token git clone git@github.com:private/repo.git
🔹 Зачем: безопасно использовать ключи в Dockerfile.
🔹 Когда: доступ к приватным репозиториям или API.
4. .dockerignore

Файл, исключающий лишние файлы из контекста:
.git
node_modules
*.md
tests/
🔹 Зачем: быстрее сборка, меньше риск утечки чувствительных данных.
🔹 Когда: всегда! Особенно если у вас много локальных артефактов.
5. HEALTHCHECK
Добавляет проверку “жив ли контейнер”:
HEALTHCHECK —interval=30s —timeout=5s
CMD curl -f http://localhost/healthz || exit 1
🔹 Зачем: Docker сможет определить, когда контейнер «сломался».
🔹 Когда: при работе с веб-приложениями и API.
6. CLI —format
Форматируем вывод docker-команд:
docker ps —format ‘{{.ID}}t{{.Names}}t{{.Status}}’
🔹 Зачем: удобно в скриптах и автоматизации.
🔹 Когда: при CI/CD, мониторинге, логировании.
7. Оптимизация Dockerfile для кэша

Стабильные шаги — выше:
COPY package*.json . # редко меняется
RUN npm ci # кэшируется
COPY . . # часто меняется
🔹 Зачем: ускорить повторные сборки.
🔹 Когда: всегда при больших проектах.
8. Ограничение ресурсов
docker run —cpus=»2.0″ —memory=»1g» —memory-swap=»1g» app
🔹 Зачем: предотвратить чрезмерное потребление памяти или CPU.
🔹 Когда: в проде, в CI, при тестах.
9. docker events
Отслеживание событий в реальном времени:
docker events —filter type=container —filter event=start
🔹 Зачем: реагировать на события (запуск, ошибка, удаление).
🔹 Когда: для алертов, логгирования, CI.
10. Read-only контейнеры
docker run —read-only —tmpfs /tmp myapp
🔹 Зачем: защита от записи, предотвращение атак на файловую систему.
🔹 Когда: сервисы, не требующие записи на диск.
11. docker system prune
Удаление неиспользуемых ресурсов:
docker system prune -a —volumes
🔹 Зачем: освободить место, убрать мусор.
🔹 Когда: регулярно в dev/CI-средах.
12. Override ENTRYPOINT
docker run —entrypoint /bin/sh -it myimage
🔹 Зачем: обойти основной процесс и получить shell-доступ.
🔹 Когда: отладка, аварийное восстановление.
13. Docker Contexts
docker context create prod —docker «host=ssh://user@prod-host»
docker context use prod
🔹 Зачем: переключаться между удалёнными хостами без изменения переменных окружения.
🔹 Когда: multi-env деплой (local/staging/prod).
🔥 Итого:
Каждый из этих трюков делает вашу работу с Docker надёжнее, быстрее и безопаснее. Внедряйте выборочно: начните с тех, что закроют текущие боли (большой размер → squash, CI медленный → кеш, прод небезопасен → read-only + healthcheck).
