10 проверенных промтов для Docker: от Dockerfile до multi-stage сборок

Docker давно стал стандартом контейнеризации, но писать эффективные и безопасные Dockerfile умеют не все. Оптимизация образов, корректный Compose, мультистейдж — это то, что реально сокращает время сборки и размер артефактов. Я каждый день использую AI, чтобы ускорить рутину. Ниже — подборка промтов, которые я сам применяю в работе. Они покрывают 90% реальных задач: от простого Python-приложения до production-сборок с healthcheck и мультиархитектурными образами.

Все промты проверены на практике, основаны на best practices из официальной документации Docker (docs.docker.com) и реальных кейсах. Берите и используйте.

1. Базовый Dockerfile для Python/Flask с виртуальным окружением

Промт:

Напиши Dockerfile для Flask-приложения на Python 3.12 с использованием виртуального окружения. Установи зависимости только для продакшена, используй slim-образ, добавь healthcheck, запускай от непривилегированного пользователя.

Пример результата:

FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN python -m venv /venv && . /venv/bin/activate && pip install --no-cache-dir -r requirements.txt

FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /venv /venv
COPY . .
ENV PATH="/venv/bin:$PATH"
RUN useradd -m -s /bin/bash appuser && chown -R appuser:appuser /app
USER appuser
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:5000/health || exit 1
EXPOSE 5000
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]

Когда использовать: при старте нового Python-микросервиса. Мультистейдж разделяет сборку зависимостей и финальный образ — размер падает в 2-3 раза.

2. Dockerfile для Node.js с кэшированием npm и multi-stage

Промт:

Сгенерируй Dockerfile для Node.js 20 приложения с Express. Используй сначала копирование package.json и package-lock.json для кэширования npm install, затем копируй исходники. В финальном образе — только production-зависимости, Alpine, non-root пользователь.

Пример результата:

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

FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/node_modules /app/node_modules
COPY . .
RUN addgroup -S appgroup && adduser -S appuser -G appgroup && chown -R appuser:appgroup /app
USER appuser
HEALTHCHECK --interval=30s CMD wget -qO- http://localhost:3000/health || exit 1
EXPOSE 3000
CMD ["node", "server.js"]

Совет: npm ci быстрее и надёжнее npm install, а разделение копирования зависимостей и исходников максимизирует кэш слоёв.

3. Docker Compose для связки приложения + PostgreSQL + Redis

Промт:

Напиши docker-compose.yml для приложения на Node.js, которое использует PostgreSQL и Redis. Определи volumes для данных, network, переменные окружения из .env, healthcheck для базы, зависимость по health.

Пример результата:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
      - REDIS_URL=redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    networks:
      - backend
  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER}"]
      interval: 10s
    networks:
      - backend
  redis:
    image: redis:7-alpine
    volumes:
      - redisdata:/data
    networks:
      - backend
volumes:
  pgdata:
  redisdata:
networks:
  backend:

Применение: локальная разработка или тестовый стенд. Зависимость по healthcheck гарантирует, что приложение стартует только после готовности БД.

4. Оптимизация образа: apt, pip и multi-stage

Промт:

Как уменьшить размер Docker-образа для Python-приложения? Дай пошаговый план с командами: используй slim-образ, multi-stage, очищай кэш apt и pip, не ставь рекомендованные пакеты (-–no-install-recommends).

Пример фрагмента оптимизированного Dockerfile:

FROM python:3.12-slim AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential && rm -rf /var/lib/apt/lists/*
...

Объяснение: --no-install-recommends сокращает количество лишних пакетов, а удаление /var/lib/apt/lists/* внутри того же слоя не увеличивает размер. Мультистейдж оставляет в финальном образе только артефакты, а не компиляторы.

5. Легковесный образ для Go (статическая компиляция)

Промт:

Напиши Dockerfile для Go-приложения с использованием multi-stage и статической компиляции. Финальный образ — scratch или distroless. Укажи –-ldflags ‘-s -w’ для уменьшения размера бинарника.

Пример результата:

FROM golang:1.22 AS build
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 ./cmd/server

FROM scratch
COPY --from=build /app/server /server
EXPOSE 8080
CMD ["/server"]

Результат: образ размером ~10-15 МБ. Отсутствие базового образа (scratch) снижает поверхность атаки. Для доступа к корневым сертификатам используй scratch + ca-certificates.

6. Безопасность: non-root user и read-only rootfs

Промт:

Создай Dockerfile для приложения на Node.js с безопасными настройками: non-root пользователь, read-only root файловая система, отсутствие лишних прав. Добавь tmpfs для /tmp.

Пример:

FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup . .
USER appuser
EXPOSE 3000
VOLUME /app/data
CMD ["node", "server.js"]

При запуске можно добавить флаг --read-only --tmpfs /tmp. В Compose это задаётся через read_only: true и tmpfs: /tmp. Такая конфигурация рекомендуется OWASP для контейнеров.

7. Docker Compose для горячей перезагрузки (hot-reload)

Промт:

Напиши docker-compose.yml для локальной разработки React-приложения с hot-reload. Используй bind mount для синхронизации исходников, environment NODE_ENV=development, port mapping.

Пример:

version: '3.8'
services:
  frontend:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - CHOKIDAR_USEPOLLING=true
      - NODE_ENV=development
    command: npm start

Почему это работает: bind mount подменяет код внутри контейнера, а CHOKIDAR_USEPOLLING=true решает проблемы с файловыми уведомлениями на macOS и Windows.

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

Промт:

Покажи, как ускорить сборку Docker-образа с помощью BuildKit. Используй –-mount=type=cache для кэширования каталогов /var/cache/apt и ~/.cache/pip.

Пример:

# syntax=docker/dockerfile:1.4
FROM ubuntu:22.04
RUN --mount=type=cache,target=/var/cache/apt \
    apt-get update && apt-get install -y python3 python3-pip

Для включения BuildKit установи переменную DOCKER_BUILDKIT=1. Кэш остаётся на хосте, что ускоряет повторные сборки в десятки раз.

9. Java/Spring Boot: jlink + slim-образ

Промт:

Создай Dockerfile для Spring Boot 3 приложения с использованием jlink для создания минимального JRE и multi-stage. Финальный образ должен быть на основе Alpine или distroless.

Пример:

FROM openjdk:21-jdk-slim AS build
WORKDIR /app
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offline
COPY src ./src
RUN ./mvnw package -DskipTests

FROM openjdk:21-jre-slim
RUN jlink --module-path /usr/java/openjdk-21/jmods --add-modules java.base,java.logging,java.sql --output /jre
COPY --from=build /app/target/*.jar /app/app.jar
ENTRYPOINT ["/jre/bin/java", "-jar", "/app/app.jar"]

Эффект: jlink создаёт JRE только с необходимыми модулями, размер образа снижается с ~300 МБ до ~80 МБ.

10. Multi-arch образы с docker buildx

Промт:

Напиши команду для сборки и публикации Docker-образа для amd64 и arm64 через buildx. Укажи платформы, тег версии, кэш из Github Actions.

Пример:

docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 \
  -t myregistry/app:1.0.0 \
  --cache-from=type=gha --cache-to=type=gha,mode=max \
  --push .

Когда пригодится: при поддержке Raspberry Pi, Apple Silicon или arm-серверов. Единый manifest-список позволяет одному тегу работать на любой архитектуре.

Заключение

Эти 10 промтов покрывают ежедневные задачи: от написания Dockerfile до сборки для production. Они сэкономят часы гугления и проверок синтаксиса. Адаптируйте примеры под свой стек, подставляйте свои переменные и используйте AI как ассистента, который сразу даёт рабочий код на основе best practices.

Подписывайтесь на блог Asibiont — делюсь практическими инструментами для разработчиков, без воды.

← Все статьи

Комментарии

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

Интеграция CAN bus с AI-агентом ASI Biont: отладка промышленных сетей через чат

27 июля 2026

Международное право и арбитраж — LL.M. уровень: как AI-обучение Asibiont готовит юристов к реальным спорам

27 июля 2026

Vibe Coding и китайский AI: как перестать паниковать и начать кодить быстрее

27 июля 2026

10 промтов для Kubernetes: манифесты, Helm, деплой, которые реально ускоряют работу

27 июля 2026

Как мы автоматизировали управление DNS в Cloudflare за минуты с помощью AI-агента ASI Biont (без кода)

27 июля 2026

Международное налоговое планирование (OECD, IRS, EU): как освоить BEPS, Pillar Two и трансфертное ценообразование с помощью AI-обучения

27 июля 2026

10 промтов для работы с LLM: дообучение, RAG и промпт-инжиниринг

27 июля 2026

Revolut + AI-агент: как автоматизировать финансы без кода и сэкономить до 70% времени на платежах

26 июля 2026

WebAssembly (WASM) — от браузера до сервера: практический курс для бэкенд-разработчиков и DevOps на asibiont.com

26 июля 2026