10 промтов для Docker: от Dockerfile до multi-stage сборок, которые ускорят вашу работу
Docker стал стандартом де-факто для упаковки и доставки приложений. Согласно отчету Docker Inc. за 2025 год, более 80% профессиональных разработчиков используют контейнеры хотя бы раз в неделю. Но писать Dockerfile и docker-compose.yml вручную — задача рутинная и чреватая ошибками: забытая очистка кэша, неоптимальный порядок слоёв, утечка секретов через build args.
Я — практикующий разработчик, и каждый день использую AI-промты для генерации Docker-артефактов. Ниже — 10 проверенных промтов, которые я применяю в реальных проектах. Никакой теории — только рабочие шаблоны с примерами и пояснениями.
1. Генерация Dockerfile под конкретный стек
Промт: «Сгенерируй production-ready Dockerfile для Node.js (Express) приложения. Используй официальный образ node:20-alpine. Установи только production-зависимости. Добавь multi-stage сборку для минимизации размера финального образа. Включи HEALTHCHECK и non-root user. Выведи итоговый Dockerfile и краткое объяснение каждого этапа.»
Пример использования:
Я вставляю этот промт в Claude или ChatGPT, предварительно указав версию Node.js. На выходе получаю:
# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# Stage 2: Production
FROM node:20-alpine
RUN addgroup -g 1001 nodejs && adduser -S nodejs -u 1001
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
USER nodejs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
CMD ["node", "server.js"]
Размер образа уменьшается с ~1.2 ГБ (если брать полный образ) до ~180 МБ. Ключевой момент: multi-stage позволяет выкинуть весь инструментарий сборки (TypeScript-компилятор, dev-зависимости) из финального образа.
2. Оптимизация существующего Dockerfile
Промт: «Вот мой Dockerfile (вставьте код). Найди проблемы с точки зрения безопасности, размера и кэширования слоёв. Предложи исправленную версию. Объясни, почему твои изменения улучшают билд.»
Реальный кейс:
Коллега прислал Dockerfile, где COPY . . шёл до установки зависимостей. Любое изменение исходного кода инвалидировало кэш npm install, и сборка занимала 4-5 минут вместо 30 секунд. AI предложил переставить команды местами и добавить .dockerignore. После правок время сборки сократилось до 20 секунд при изменении кода.
3. Генерация docker-compose.yml для локальной разработки
Промт: «Создай docker-compose.yml для разработки Django-приложения с PostgreSQL и Redis. Сервисы должны быть в одной сети. Django должен перезагружаться при изменении кода (bind mount). PostgreSQL — использовать volume для сохранения данных. Добавь environment variables для подключения к БД. Укажи зависимости сервисов (depends_on).»
Пример вывода:
version: '3.9'
services:
db:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
environment:
DATABASE_URL: postgres://user:password@db:5432/myapp
REDIS_URL: redis://redis:6379/0
depends_on:
- db
- redis
volumes:
postgres_data:
Этот промт экономит мне 15-20 минут на ручное написание конфигурации для каждого нового микросервиса.
4. Написание .dockerignore
Промт: «Сгенерируй .dockerignore для Python-проекта. Исключи .git, pycache, .env, виртуальное окружение, Dockerfile, README.md, тесты и CI-конфиги. Объясни, почему каждое исключение важно для безопасности и производительности.»
Важность: Без .dockerignore в образ могут попасть секреты из .env, большие папки node_modules (если случайно скопировали до .dockerignore), что увеличивает размер образа и время сборки. Стандартный .dockerignore для Python-проекта выглядит так:
.git
__pycache__/
*.py[cod]
*.egg-info/
.env
venv/
.venv/
Dockerfile
README.md
tests/
.gitlab-ci.yml
.github/
5. Multi-stage сборка для Go-приложения
Промт: «Создай multi-stage Dockerfile для Go-приложения. Первый этап — сборка с использованием golang:1.22-alpine, второй — scratch (минимальный образ). Скопируй только скомпилированный бинарник. Добавь аргумент сборки VERSION для внедрения версии в бинарник через -ldflags.»
Результат:
FROM golang:1.22-alpine AS builder
ARG VERSION=dev
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-X main.Version=${VERSION}" -o /app ./cmd/server
FROM scratch
COPY --from=builder /app /app
EXPOSE 8080
ENTRYPOINT ["/app"]
Размер финального образа — около 15 МБ вместо 800+ МБ, если бы мы использовали полный образ Go. Это критично для CI/CD, где каждый мегабайт влияет на скорость деплоя.
6. Безопасность: сканирование образов
Промт: «Проанализируй Dockerfile на наличие уязвимостей и нарушений best practices: запуск от root, хардкод паролей, использование latest-тегов, отсутствие HEALTHCHECK, большие слои. Предложи исправления для каждого пункта.»
Пример проблем:
- FROM ubuntu:latest — нестабильный тег; завтра образ может обновиться и сломать сборку.
- ENV API_KEY=12345 — секрет попадает в историю слоёв и виден в docker history.
- RUN apt-get update && apt-get install -y python — отсутствует очистка кэша apt, увеличивает размер.
AI-исправление: используйте FROM ubuntu:24.04, передавайте секреты через --secret (BuildKit), добавляйте rm -rf /var/lib/apt/lists/* в ту же RUN-команду.
7. Генерация Dockerfile для Python с Poetry
Промт: «Напиши Dockerfile для Python-приложения, использующего Poetry для управления зависимостями. Используй официальный python:3.12-slim. Установи Poetry, скопируй pyproject.toml и poetry.lock, выполни poetry install --no-dev. Затем скопируй исходный код. Добавь non-root пользователя.»
Важный нюанс: Poetry устанавливает зависимости в виртуальное окружение внутри контейнера. Лучше отключить создание venv (POETRY_VIRTUALENVS_CREATE=false), чтобы зависимости устанавливались глобально. AI-промт должен это учитывать, иначе образ получится больше из-за дублирования.
8. Оптимизация размера: анализ слоёв
Промт: «Вот вывод docker history моего образа (вставьте вывод). Определи, какие слои занимают больше всего места. Предложи способ объединить или уменьшить их, используя multi-stage или более эффективные команды RUN.»
Пример из практики:
IMAGE CREATED SIZE
abc123 2 hours ago 245MB COPY . .
def456 2 hours ago 1.2GB RUN npm install
...
Проблема: node_modules скопировались вместе с исходниками, хотя могли быть установлены на более раннем этапе. AI предложил разделить COPY: сначала package.json, затем npm install, потом остальной код. Размер слоя COPY снизился с 245 МБ до 2 МБ, потому что node_modules не дублировались.
9. Генерация .env.example и документации
Промт: «На основе docker-compose.yml (вставьте код) сгенерируй файл .env.example со всеми переменными окружения и комментариями. Также напиши краткую документацию по запуску проекта: как собрать образы, запустить контейнеры, выполнить миграции БД.»
Результат:
# .env.example
POSTGRES_DB=myapp
POSTGRES_USER=user
POSTGRES_PASSWORD=change_me_in_production
DJANGO_SECRET_KEY=your-secret-key-here
REDIS_URL=redis://redis:6379/0
Этот промт особенно полезен для open-source проектов, где качественная документация — залог количества контрибьюторов.
10. Миграция с docker-compose на Kubernetes
Промт: «Преобразуй следующий docker-compose.yml (вставьте код) в набор манифестов Kubernetes: Deployment, Service, ConfigMap, Secret, PersistentVolumeClaim. Используй минимальные привилегии для контейнеров (securityContext). Добавь resource requests/limits. Объясни, какие изменения потребуются для запуска в production-кластере.»
Зачем это нужно: Даже если вы не переходите на K8s прямо сейчас, генерация манифестов помогает понять, как ваш сервис будет масштабироваться. AI корректно обрабатывает depends_on (превращая в initContainers или startupProbe), volumes (в PVC) и environment (разделяя на ConfigMap и Secret).
Заключение
Эти 10 промтов покрывают 90% моих ежедневных задач с Docker. Они не только экономят время, но и улучшают качество конфигураций: AI редко забывает про HEALTHCHECK, non-root user или очистку кэша, что часто упускают люди в спешке.
Совет: не копируйте промты слепо. Адаптируйте под свой стек — замените Node.js на Python, PostgreSQL на MySQL, добавьте специфичные для вашего проекта переменные. И всегда проверяйте сгенерированный код: AI может предложить устаревшие синтаксисы (например, version: '3' в docker-compose, хотя начиная с Docker Compose v2 версия не обязательна).
ASI Biont поддерживает подключение к Docker Hub и другим registry через API — подробнее на asibiont.com. Если вы автоматизируете сборку и публикацию образов, интеграция с AI-генерацией конфигураций может быть следующим шагом для вашего CI/CD пайплайна.
Комментарии