12 промтов для Docker: от Dockerfile до multi-stage сборок

Введение

Docker стал стандартом де-факто для контейнеризации приложений. Однако даже опытные разработчики часто тратят часы на отладку Dockerfile, настройку Compose или оптимизацию образов. Я собрал 12 проверенных промтов, которые сам использую в работе ежедневно. Каждый — с реальным примером и пояснением. Никакой воды, только практика.

1. Создание эффективного Dockerfile

Промт: «Напиши Dockerfile для Node.js приложения с multi-stage сборкой. Первый этап: установка зависимостей и сборка. Второй этап: минимальный образ на основе Alpine. Используй .dockerignore. Укажи non-root пользователя.»

Зачем: Многие пишут Dockerfile в один этап, включая dev-зависимости в финальный образ. Это увеличивает размер и поверхность атаки. Multi-stage решает обе проблемы.

Пример:

FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

FROM node:18-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER appuser
CMD ["node", "dist/index.js"]

2. Оптимизация кэширования слоёв

Промт: «Перепиши Dockerfile так, чтобы максимально использовать кэш Docker. Раздели копирование package.json и установку зависимостей от копирования исходного кода. Добавь комментарии, объясняющие порядок слоёв.»

Зачем: Каждый RUN, COPY, ADD создаёт слой. Если менять код, но не зависимости — кэш для установки зависимостей останется валидным. Это ускоряет сборку в разы.

Пример:

# Сначала копируем только то, что редко меняется
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# Потом код — меняется часто
COPY . .

3. Docker Compose для локальной разработки

Промт: «Создай docker-compose.yml для веб-приложения с PostgreSQL, Redis и сервисом на FastAPI. Добавь volume для хранения данных БД, healthcheck для каждого сервиса и сеть bridge. Используй переменные окружения из .env.»

Зачем: Однотипные Compose-файлы для каждого проекта — потеря времени. Этот промт даёт готовый шаблон с best practices.

Пример:

version: '3.9'
services:
  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "postgres"]
    env_file: .env
  redis:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
  app:
    build: .
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    ports:
      - "8000:8000"
volumes:
  postgres_data:

4. Минимизация размера образа

Промт: «Проанализируй Dockerfile и предложи способы уменьшить финальный образ. Используй distroless или scratch, объединяй RUN-команды, удаляй временные файлы в той же инструкции.»

Зачем: Большие образы медленнее пушатся и пуллятся. По данным DockerCon, средний образ можно уменьшить на 40-60% без потери функциональности.

Пример: Вместо:

RUN apt-get update
RUN apt-get install -y curl
RUN apt-get clean

Пишем:

RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/*

5. Healthcheck в Dockerfile

Промт: «Добавь HEALTHCHECK в Dockerfile для Python-приложения на Flask. Проверяй эндпоинт /health. Укажи интервал 30s, timeout 10s, retries 3.»

Зачем: Без healthcheck Docker не знает, живо ли приложение. Это критично для оркестрации (Kubernetes, Swarm).

Пример:

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:5000/health || exit 1

6. Использование аргументов сборки (ARG)

Промт: «Перепиши Dockerfile с использованием ARG для версии Node.js, порта и режима сборки (development/production). Укажи значения по умолчанию.»

Зачем: Один Dockerfile для разных окружений — без дублирования.

Пример:

ARG NODE_VERSION=18
FROM node:${NODE_VERSION}-alpine
ARG PORT=3000
ENV PORT=${PORT}
EXPOSE ${PORT}

7. Multi-stage для Go-приложения

Промт: «Создай multi-stage Dockerfile для Go-приложения. Первый этап: сборка с Go образ. Второй: scratch с бинарником. Добавь флаги компиляции для уменьшения размера.»

Зачем: Go-бинарники статически скомпилированы, им не нужен образ с OS. Scratch даёт образ <10 MB.

Пример:

FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app/server .

FROM scratch
COPY --from=builder /app/server /
CMD ["/server"]

8. Логирование и мониторинг в Compose

Промт: «Добавь в docker-compose.yml настройки логирования (драйвер json-file с ротацией) и метрики (cAdvisor для сбора метрик контейнеров).»

Зачем: По умолчанию логи растут бесконтрольно. Ротация — must have.

Пример:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

9. Сети и изоляция

Промт: «Создай docker-compose.yml с тремя сетями: frontend, backend, db. Помести Nginx в frontend, приложение в backend, PostgreSQL в db. Разреши трафик только между нужными сервисами.»

Зачем: Микросегментация повышает безопасность.

10. Secrets management

Промт: «Покажи, как передать секреты (пароль БД, API-ключ) в Docker Compose без хранения в Dockerfile или переменных окружения в открытом виде. Используй secrets.»

Зачем: Переменные окружения видны в docker inspect. Secrets — безопаснее.

11. Dockerfile для Python с Poetry

Промт: «Напиши Dockerfile для Python-приложения, использующего Poetry. Установи зависимости в отдельном слое, используй virtualenv внутри контейнера.»

12. Автоматическая очистка

Промт: «Составь bash-скрипт для очистки неиспользуемых образов, контейнеров, volumes и сетей. Добавь подтверждение перед удалением.»

Заключение

Эти промты покрывают 90% повседневных задач с Docker. Сохрани их в свой workflow — и забудь о ручной отладке. Попробуй прямо сейчас: возьми свой текущий Dockerfile и примени первый промт. Результат удивит.

← Все статьи

Комментарии

Читайте также

G#: Современный язык .NET с эргономикой Go, Kotlin и Swift — идеальный инструмент для Vibe Coding в 2026 году

16 июля 2026

Очереди задач: скрытая сложность, о которой молчат документации

16 июля 2026

Go для бэкенда: освойте gRPC, конкурентность и производственные шаблоны с обучением на основе ИИ

16 июля 2026

Энергия под контролем: Как AI-агент ASI Biont автоматизирует мониторинг Energy meters через API

16 июля 2026

Пошаговое руководство по интеграции Environmental sensors с AI-агентом ASI Biont: мониторинг климата, Telegram-триггеры и автоматизация умного здания

16 июля 2026

I2C-датчики под управлением AI: как ASI Biont автоматизирует сбор данных с BME280 и MPU6050 без единой строки кода

16 июля 2026

10 промтов для SEO-оптимизации: мета-теги, контент, структура

16 июля 2026

Как подключить Unisender к AI-агенту ASI Biont: автоматизация email-маркетинга через API

16 июля 2026

10 промтов для GameDev: Unity, Unreal Engine и Godot — от концепта до прототипа

16 июля 2026