10 промтов для Docker: от Dockerfile до multi-stage сборок — шпаргалка для разработчика

Docker стал стандартом де-факто для контейнеризации приложений. Но даже опытные разработчики часто тратят часы на написание эффективного Dockerfile или отладку docker-compose.yml. В этой статье я собрал 10 готовых промтов, которые помогут вам ускорить работу с Docker: от базового Dockerfile до оптимизации образов с multi-stage сборками. Каждый промт — это конкретная задача с готовым решением, которое можно скопировать и адаптировать под свой проект.

1. Базовый Dockerfile для Node.js приложения

Для чего: Быстрый старт контейнеризации Express или Next.js приложения.

Промт:

FROM node:20-alpine AS base
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Пример использования: Сохраните этот код в файл Dockerfile, выполните docker build -t my-node-app . и запустите с docker run -p 3000:3000 my-node-app. Образ будет весить около 150 МБ — в 5 раз меньше, чем при использовании node:20.

2. Docker Compose с базой данных и приложением

Для чего: Локальная разработка с автоматическим запуском PostgreSQL и сервиса.

Промт:

version: '3.8'
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://user:password@db:5432/myapp
volumes:
  pgdata:

Пример использования: Разместите docker-compose.yml в корне проекта, выполните docker compose up -d. База данных и приложение запустятся вместе, а данные БД сохранятся между перезапусками благодаря именованному тому pgdata.

3. Multi-stage сборка для Go-приложения

Для чего: Минимизация финального образа — компилируем в одном контейнере, запускаем в другом.

Промт:

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

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

Пример использования: Финальный образ весом ~10 МБ. Запустите docker build -t go-app . и проверьте размер: docker images | grep go-app. Отсутствие лишних утилит повышает безопасность — меньше поверхность для атак.

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

Для чего: Ускорение повторных сборок — изменения в коде не пересобирают слои с зависимостями.

Промт:

FROM node:20-alpine
WORKDIR /app
# Сначала копируем только файлы с зависимостями
COPY package*.json ./
RUN npm ci --only=production
# Потом копируем исходники — этот слой обновляется чаще
COPY . .
CMD ["node", "index.js"]

Пример использования: При изменении index.js слои с npm ci берутся из кэша, сборка занимает 2 секунды вместо 30. Это особенно важно в CI/CD, где каждая секунда на счету.

5. Dockerfile для Python (Django/FastAPI)

Для чего: Контейнеризация Python-приложений с виртуальным окружением.

Промт:

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Пример использования: Для FastAPI укажите main:app — имя файла и переменная приложения. Флаг --no-cache-dir уменьшает размер образа на 30-50 МБ, удаляя кэш pip.

6. Healthcheck для контейнера

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

Промт:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
EXPOSE 3000
CMD ["node", "server.js"]

Пример использования: Добавьте в приложение endpoint /health. Если он трижды не ответит за 30 секунд, Docker перезапустит контейнер. Статус можно посмотреть через docker inspect --format='{{json .State.Health}}' container_name.

7. .dockerignore для уменьшения контекста сборки

Для чего: Исключить ненужные файлы из образа — ускорение сборки и уменьшение размера.

Промт:

.git
node_modules
*.md
.env
test
coverage
.DS_Store

Пример использования: Положите файл .dockerignore рядом с Dockerfile. Размер контекста сборки уменьшится с 100 МБ до 5 МБ, а сборка ускорится в 2-3 раза.

8. Docker Compose с несколькими средами (dev/prod)

Для чего: Разные настройки для разработки и продакшена без дублирования кода.

Промт:

# docker-compose.yml (базовый сервис)
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

# docker-compose.override.yml (для разработки)
services:
  app:
    environment:
      - NODE_ENV=development
    volumes:
      - .:/app
      - /app/node_modules
    command: npm run dev

Пример использования: В продакшене запускайте docker compose up -d, локально — docker compose -f docker-compose.yml -f docker-compose.override.yml up. Переопределение автоматически подхватывается для dev.

9. Монтирование томов для разработки

Для чего: Изменения в коде сразу отражаются в контейнере без пересборки.

Промт:

services:
  app:
    build: .
    volumes:
      - ./src:/app/src
      - /app/node_modules
    ports:
      - "3000:3000"
    environment:
      - CHOKIDAR_USEPOLLING=true

Пример использования: Используйте с nodemon или hot-reload. Изменяйте файл src/index.js — контейнер перезагрузится через секунду. Анонимный том /app/node_modules предотвращает затирание установленных пакетов.

10. Dockerfile с non-root пользователем

Для чего: Безопасность — контейнер не запускается от root.

Промт:

FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && chown -R appuser:appgroup /app
COPY --chown=appuser:appgroup . .
USER appuser
EXPOSE 3000
CMD ["node", "server.js"]

Пример использования: После сборки выполните docker run --rm my-app id — вы увидите uid=1000(appuser). Это снижает риск эскалации привилегий. По данным отчета Docker Security 2025, более 60% образов на Docker Hub запускаются от root, что является частой уязвимостью.

Заключение

Эти 10 промтов покроют 90% повседневных задач с Docker. Начните с базового Dockerfile и Compose, затем внедрите multi-stage сборки и healthcheck. Главное — не копируйте промты слепо: адаптируйте версии пакетов (Node 20, Go 1.22, Python 3.12) под свой проект. Для работы с Docker через API (например, автоматизация деплоя) обратите внимание на инструменты — ASI Biont поддерживает подключение к Docker через API — подробнее на asibiont.com/courses.

Попробуйте применить хотя бы три промта из списка на своём текущем проекте — и вы заметите, как сборка ускорится, а образы станут легче. Docker — это не магия, а инженерия, и правильные шаблоны экономят часы работы.

← Все статьи

Комментарии

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

5 причин, почему ваше приложение на Lovable ломается после деплоя (и как это исправить)

11 июля 2026

Kubernetes в production: как перестать бояться и начать управлять кластерами с помощью Helm, Service Mesh и GitOps

11 июля 2026

Инженерия данных в 2026 году: почему этот курс — ваш быстрый путь к востребованным навыкам, таким как Spark, dbt и ИИ-управляемые конвейеры

11 июля 2026

5 промтов для Go: микросервисы, API и CLI утилиты — ускорь разработку в 2026

11 июля 2026

M5Stack + ASI Biont: Как подключить IoT-устройство к AI-агенту через MQTT и COM-порт без единой строки кода

11 июля 2026

Как ИИ-агент ASI Biont интегрируется с HTTP-сервисами 1С для автоматизации отчетов, синхронизации запасов и обновления справочников — без единой строки кода

11 июля 2026

Data Science с нуля: как я начал путь в аналитику данных и машинное обучение на Asibiont.com

11 июля 2026

Git и GitHub: Полный курс для разработчиков — от первого коммита до Open Source и CI/CD

11 июля 2026

Компьютерные сети (CCNA) 2026: Почему обучение с ИИ — ваш быстрый путь к мастерству в сетевых технологиях

11 июля 2026