~/VibeHandbook

Инфраструктура

docker.com

Containers

Что это

Контейнер упаковывает ваше приложение вместе со всем, что нужно для его работы — кодом, библиотеками, системными инструментами — в один переносимый пакет. Этот пакет работает одинаково на вашем ноутбуке, тестовом сервере или в облаке, что устраняет классическую проблему «у меня на машине работает». Docker — самый распространённый инструмент для их сборки.

Сильные стороны

  • Одинаковое окружение везде — собрал один раз, запускай где угодно.
  • Полный контроль над средой выполнения, системными пакетами и зависимостями.
  • Нет холодных стартов после запуска; хорошо подходит для стабильного трафика.
  • Переносимость между облачными провайдерами, что позволяет избежать жёсткой привязки.
  • Поддержка любого языка или фреймворка, включая долгоживущие процессы.

Компромиссы

  • Вы управляете большим: базовыми образами, обновлениями и подбором ресурсов.
  • Масштабирование не происходит автоматически, пока вы не добавите оркестратор (например, Kubernetes), что добавляет реальную сложность.
  • Запущенный контейнер стоит денег, даже когда простаивает.
  • Бо́льшие образы означают более медленную сборку и развёртывание.
  • Установка обновлений безопасности образа — ваша ответственность.

Когда использовать

Выбирайте контейнеры, когда вам нужно стабильное, полностью контролируемое окружение: приложения со специфическими системными зависимостями, долгоживущие сервисы, фоновые обработчики или всё, что перерастает ограничения serverless и edge-функций.

Соответствие vibe coding

Контейнеры — хорошая цель для управления ИИ, потому что Dockerfile — это просто рецепт, а агенты хорошо умеют писать рецепты. Вы можете попросить ИИ сгенерировать Dockerfile, .dockerignore и команды развёртывания, а затем итерировать, скармливая ему ошибки сборки. Совет: попросите небольшой базовый образ (например, alpine или вариант slim) и многоступенчатую сборку — это держит образы компактными, ускоряет сборку и уменьшает поверхность атаки. Платформы вроде Fly.io, Google Cloud Run и Railway могут развернуть контейнер одной командой.

# Dockerfile — многоступенчатое Node-приложение
FROM node:20-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=build /app .
EXPOSE 3000
CMD ["node", "server.js"]
# Сборка и запуск локально
docker build -t my-app .
docker run -p 3000:3000 my-app