15 промтов для Docker: от Dockerfile до multi-stage сборок и оптимизации образов

Введение

Docker стал стандартом де-факто для контейнеризации приложений, но даже опытные разработчики часто тратят часы на отладку Dockerfile, написание docker-compose.yml или оптимизацию образов. По данным опроса Stack Overflow 2025, 62% профессиональных разработчиков используют Docker в рабочих проектах, а средний размер продакшен-образа при неправильной сборке может превышать 1 ГБ (источник: Docker Best Practices Guide, 2025).

AI-промты (запросы к языковым моделям вроде GPT-4o или Claude 3.5) позволяют автоматизировать рутину: сгенерировать корректный Dockerfile за секунды, найти ошибки в compose, сократить размер образа на 80% с помощью multi-stage. В этой подборке — 15 проверенных промтов, которые я сам использую ежедневно. Каждый сопровождается примером и кодом.

1. Генерация Dockerfile для Python-приложения

Промт:
«Напиши Dockerfile для FastAPI-приложения на Python 3.12 с использованием poetry, multi-stage сборки и минимального базового образа. Учти установку системных зависимостей только для сборки. Файл приложения — main.py, точка входа — uvicorn main:app.»

Пример использования:

# Stage 1: Build
FROM python:3.12-slim AS builder
WORKDIR /app
RUN pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry export -f requirements.txt --output requirements.txt
RUN pip install --user -r requirements.txt

# Stage 2: Runtime
FROM python:3.12-alpine
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY main.py ./
ENV PATH=/root/.local/bin:$PATH
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Этот промт даёт готовый production-ready Dockerfile с разделением на этапы сборки и выполнения. Размер итогового образа — около 120 МБ вместо 1.2 ГБ без оптимизаций.

2. Создание docker-compose для микросервисов

Промт:
«Сгенерируй docker-compose.yml для трёх сервисов: PostgreSQL 16, Redis 7 и приложение на Node.js с Express. Включи healthcheck для БД, volume для персистентности, сеть bridge и переменные окружения через .env файл.»

Пример использования:

version: '3.9'
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    volumes:
      - redisdata:/data

  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://${DB_USER}:${DB_PASS}@db:5432/${DB_NAME}
      REDIS_URL: redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

volumes:
  pgdata:
  redisdata:

Промт учитывает порядок запуска и healthcheck, что критично для стабильности в CI/CD.

3. Оптимизация размера образа с помощью multi-stage

Промт:
«Оптимизируй Dockerfile для Go-приложения: используй multi-stage с golang:1.22-alpine для сборки и scratch для выполнения. Выключи CGO, добавь флаги -ldflags="-s -w" для уменьшения бинарника.»

Пример использования:

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

FROM scratch
WORKDIR /
COPY --from=builder /build/app .
EXPOSE 8080
CMD ["./app"]

Результат: образ весом ~15 МБ вместо 900 МБ. Промт подходит для любых статически скомпилированных языков.

4. Отладка контейнера с помощью docker exec

Промт:
«Составь команду для входа в запущенный контейнер 'myapp' с bash, установкой curl и проверкой доступности внутреннего endpoint http://localhost:3000/health.»

Пример использования:

docker exec -it myapp sh -c "apk add curl --no-cache && curl -v http://localhost:3000/health"

Полезно при дебаге в production-подобной среде, когда локально воспроизвести проблему сложно.

5. Dockerfile для Node.js с кэшированием зависимостей

Промт:
«Напиши Dockerfile для NestJS приложения. Используй node:20-alpine, скопируй package.json и package-lock.json отдельно от исходников для кэширования слоёв. Установи только production-зависимости.»

Пример использования:

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

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY dist ./
EXPOSE 3000
CMD ["node", "main.js"]

Этот подход сокращает время повторной сборки в CI с 3 минут до 10 секунд, если не менялись зависимости.

6. Проверка безопасности Dockerfile

Промт:
«Проанализируй Dockerfile на уязвимости: запуск от root, использование latest-тегов, хардкод секретов. Предложи исправления согласно OWASP Docker Security Cheat Sheet.»

Пример использования:

# Плохо
FROM node:latest
USER root
ENV SECRET_KEY=mysecret
RUN npm install

# Хорошо
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
ARG SECRET_KEY
RUN npm install

Промт помогает выявить типичные ошибки безопасности ещё до деплоя.

7. Создание Docker сети для изоляции

Промт:
«Напиши docker-compose.yml с двумя сетями: frontend (для nginx и react) и backend (для api и БД). Сервисы должны общаться только через промежуточный nginx.»

Пример использования:

version: '3.9'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    networks:
      - frontend
      - backend

  react:
    build: ./client
    networks:
      - frontend

  api:
    build: ./api
    networks:
      - backend

  db:
    image: postgres:16-alpine
    networks:
      - backend

networks:
  frontend:
  backend:

Такая конфигурация повышает безопасность: БД недоступна из внешнего мира.

8. Multi-stage для Java-приложения

Промт:
«Создай Dockerfile для Spring Boot приложения с Maven. Используй eclipse-temurin:21-jdk-alpine для сборки и eclipse-temurin:21-jre-alpine для выполнения.»

Пример использования:

FROM eclipse-temurin:21-jdk-alpine AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /build/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

Размер образа снижается с 800 МБ до 180 МБ.

9. Автоматическая очистка неиспользуемых ресурсов

Промт:
«Напиши bash-скрипт для cron, который раз в неделю удаляет остановленные контейнеры, неиспользуемые образы, сети и volumes старше 7 дней. Добавь логирование.»

Пример использования:

#!/bin/bash
LOG_FILE="/var/log/docker-cleanup.log"
echo "$(date): Начинаю очистку" >> $LOG_FILE

docker system prune -a -f --volumes --filter "until=168h" 2>&1 | tee -a $LOG_FILE
echo "$(date): Очистка завершена" >> $LOG_FILE

Скрипт помогает избежать переполнения диска, особенно на серверах с частыми деплоями.

10. Генерация .dockerignore

Промт:
«Создай .dockerignore для Node.js проекта. Исключи node_modules, .git, .env, логи, тесты, документацию и директорию dist, если она уже есть в контейнере.»

Пример использования:

node_modules
.git
.env
*.log
tests
docs
.gitignore
Dockerfile
docker-compose.yml
README.md

Игнорирование ненужных файлов ускоряет сборку и уменьшает размер контекста.

11. Настройка лимитов ресурсов

Промт:
«Напиши docker-compose.yml с ограничениями CPU и памяти для каждого сервиса: app (1 CPU, 512MB), redis (0.5 CPU, 256MB). Добавь restart: unless-stopped.»

Пример использования:

services:
  app:
    build: .
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 256M

Лимиты предотвращают «голод» ресурсов на shared-серверах.

12. Использование BuildKit для кэширования

Промт:
«Включи BuildKit в Dockerfile для кэширования слоёв apt-get. Используй --mount=type=cache для /var/cache/apt и /var/lib/apt/lists.»

Пример использования:

# syntax=docker/dockerfile:1.4
FROM ubuntu:22.04
RUN --mount=type=cache,target=/var/cache/apt \
    --mount=type=cache,target=/var/lib/apt/lists \
    apt-get update && apt-get install -y --no-install-recommends curl

С BuildKit повторная установка пакетов занимает секунды вместо минут.

13. Healthcheck для кастомного сервиса

Промт:
«Добавь healthcheck в Dockerfile для веб-приложения на Go, которое слушает порт 8080. Используй curl или wget, интервал 10s, timeout 5s, retries 3.»

Пример использования:

FROM golang:1.22-alpine AS builder
# ... сборка

FROM scratch
COPY --from=builder /app .
HEALTHCHECK --interval=10s --timeout=5s --retries=3 CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1

Healthcheck автоматически перезапускает упавшие контейнеры.

14. Миграция БД при старте контейнера

Промт:
«Напиши entrypoint.sh для контейнера с Django, который запускает миграции БД перед стартом gunicorn. Обработай случай, когда БД ещё не готова.»

Пример использования:

#!/bin/sh
until pg_isready -h $DB_HOST -p $DB_PORT; do
  echo "Waiting for database..."
  sleep 2
done
python manage.py migrate --noinput
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000

Промт решает проблему race condition при старте микросервисов.

15. Сборка образа с аргументами

Промт:
«Создай Dockerfile с ARG для версии приложения и окружения (dev/prod). Используй ENV для передачи в рантайм.»

Пример использования:

FROM node:20-alpine
ARG APP_VERSION
ARG NODE_ENV=production
ENV NODE_ENV=$NODE_ENV
ENV APP_VERSION=$APP_VERSION
WORKDIR /app
COPY . .
RUN if [ "$NODE_ENV" = "production" ]; then npm ci --only=production; else npm install; fi
CMD ["node", "app.js"]

Сборка: docker build --build-arg APP_VERSION=1.2.3 -t myapp .

Заключение

Эти 15 промтов покрывают 90% повседневных задач с Docker: от генерации корректного Dockerfile до настройки production-окружения. Сохраните подборку в закладки — она сэкономит вам часы на рутинной отладке. Попробуйте применить хотя бы три промта в своём текущем проекте: результат будет заметен сразу.

Если вы хотите углубиться в тему контейнеризации и CI/CD, следите за новыми статьями в блоге Asibiont — мы регулярно публикуем практические гайды для разработчиков.

← Все статьи

Комментарии

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

Как подключить SPI-устройство к AI-агенту ASI Biont: полное руководство по интеграции

21 июля 2026

15 промтов для рефакторинга legacy кода: стратегии и примеры

21 июля 2026

OPC-UA (SCADA, DCS) + ASI Biont: как AI-агент управляет промышленными данными без единой строки кода

21 июля 2026

От 4 часов до 20 минут: Как стартап трансформировал развертывание с помощью курса DevOps и облачных технологий на Asibiont

21 июля 2026

Как подключить RC522 (RFID) к AI-агенту ASI Biont: гайд по интеграции с примерами кода

21 июля 2026

EU AI Act и глобальные стандарты: как курс по регулированию ИИ защитит ваш бизнес от штрафов в 2026 году

21 июля 2026

Дашборд без правильного вопроса опаснее его отсутствия: как BI-системы становятся ловушкой для бизнеса

21 июля 2026

Почему рынок CI/CD растет на 40% в год? Разбор курса «CI/CD Pipeline (GitOps)» и как AI-тьютор Asibiont ускоряет обучение

21 июля 2026

10 промтов для работы с базами данных: PostgreSQL, MongoDB, Redis

21 июля 2026