Ответ
Работа с контейнерами — это не только Docker. Вот стек, который я использовал:
1. Docker (Runtime & Build) Стандарт де-факто для разработки и сборки. Использует Dockerfile.
- Плюсы: Простота, огромная экосистема, готовые образы на Docker Hub.
- Минусы: Демон (
dockerd) требует root-прав, что создает риски безопасности. -
Пример Dockerfile для многоэтапной сборки:
# Этап сборки FROM golang:1.21 AS builder WORKDIR /app COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o myapp . # Финальный этап FROM alpine:latest COPY --from=builder /app/myapp . CMD ["./myapp"]
2. Podman Безадресная альтернатива Docker, совместимая с его CLI. Ключевое преимущество — rootless-контейнеры.
- Плюсы: Безопаснее (не требует демона с root-правами), совместимые команды (
podmanвместоdocker). - Минусы: Меньше интеграций в некоторых CI/CD системах.
- Пример:
podman build -t my-app . && podman run -d my-app
3. Buildah Специализированный инструмент для сборки OCI-совместимых образов. Часто используется в паре с Podman.
- Плюсы: Позволяет создавать образы без Dockerfile, более тонкий контроль над слоями.
- Пример сборки образа:
newcontainer=$(buildah from alpine) buildah run $newcontainer apk add --no-cache nginx buildah config --cmd "nginx -g 'daemon off;'" $newcontainer buildah commit $newcontainer my-nginx
4. Containerd Низкоуровневая среда выполнения (runtime), которую использует Docker «под капотом». Kubernetes по умолчанию работает через containerd.
- Плюсы: Более легковесный и стабильный, чем полный Docker Engine.
- Минусы: Нет высокоуровневого CLI для разработчиков, управляется через
ctrили API.
5. LXC/LXD Системные контейнеры (в отличие от прикладных, как Docker). Запускают полноценную ОС внутри.
- Плюсы: Ближе к виртуализации, подходит для изоляции целых сред.
- Минусы: Больший оверхед, чем у прикладных контейнеров.
Мой стек: Для локальной разработки и сборки образов в CI/CD использую Docker (из-за удобства). Для продакшен-рантайма в Kubernetes кластерах предпочитаю containerd. Podman/Buildah отлично подходят для безопасной сборки в средах, где нежелателен root-демон.