🚀 13 Docker‑трюков, которые стоит знать каждому программисту

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

🚀 13 Docker‑трюков, которые стоит знать каждому программисту

Сжимает все слои в один, уменьшает вес:

export DOCKER_BUILDKIT=1
docker build --squash -t myapp:latest .

🔹 Зачем: компактные образы для продакшена.
🔹 Минус: ухудшает повторное использование кэша.


3. BuildKit Secrets

🚀 13 Docker‑трюков, которые стоит знать каждому программисту

Встраиваем секреты во время сборки:

docker build --secret id=token,src=$HOME/.ssh/id_rsa .
dockerfileКопироватьРедактировать# syntax=docker/dockerfile:1.5
RUN --mount=type=secret,id=token \
    git clone git@github.com:private/repo.git

🔹 Зачем: безопасно использовать ключи в Dockerfile.
🔹 Когда: доступ к приватным репозиториям или API.


4. .dockerignore

🚀 13 Docker‑трюков, которые стоит знать каждому программисту

Файл, исключающий лишние файлы из контекста:

.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 для кэша

🚀 13 Docker‑трюков, которые стоит знать каждому программисту

Стабильные шаги — выше:

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 контейнеры

🚀 13 Docker‑трюков, которые стоит знать каждому программисту
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).

+1
0
+1
1
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *