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 — это не магия, а инженерия, и правильные шаблоны экономят часы работы.
Комментарии