Docker стал стандартом де-факто для контейнеризации приложений. Однако создание эффективных Dockerfile и Compose-файлов требует не только знания синтаксиса, но и умения формулировать точные запросы (промты) к инструментам, коллегам или AI-ассистентам. В этой подборке — 18 проверенных промтов, которые помогут вам писать чистые, безопасные и легковесные образы.
1. Базовый Dockerfile для Python-приложения
Задача: Создать минимальный Dockerfile для FastAPI-приложения.
Промт: Напиши Dockerfile для FastAPI-приложения на Python 3.12. Используй официальный образ python:3.12-slim, установи зависимости из requirements.txt, скопируй код, запусти через uvicorn на порту 8000.
Результат:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
2. Multi-stage сборка для Go
Задача: Уменьшить размер образа Go-приложения с 800 МБ до 20 МБ.
Промт: Создай multi-stage Dockerfile для Go-приложения. Первый этап — сборка с golang:1.22, второй — запуск из scratch. Скопируй только бинарник.
Результат:
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o app .
FROM scratch
COPY --from=builder /app/app /
CMD ["/app"]
Размер образа уменьшается с ~800 МБ до ~15 МБ.
3. Оптимизация слоёв через объединение RUN
Задача: Объединить команды apt-get и pip в один RUN, чтобы снизить количество слоёв.
Промт: Добавь в Dockerfile установку системных пакетов libpq-dev и gcc, а затем Python-пакетов psycopg2. Все команды должны быть в одном RUN, с clean в конце.
Результат:
RUN apt-get update && apt-get install -y --no-install-recommends libpq-dev gcc \
&& pip install --no-cache-dir psycopg2-binary \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
4. Использование .dockerignore для исключения node_modules
Задача: Избежать копирования лишних файлов в контексте сборки.
Промт: Создай .dockerignore для Node.js приложения, чтобы исключить node_modules, .git, .env, build-папки.
Результат:
node_modules
.git
.env
build
dist
*.md
Это ускоряет сборку в 2-4 раза для больших проектов.
5. Docker Compose для связки PostgreSQL + Redis
Задача: Развернуть локально сервисы FastAPI, PostgreSQL и Redis.
Промт: Напиши docker-compose.yml для сервисов: fastapi-app (сборка из Dockerfile), postgres:16, redis:7. Настрой volumes для БД, network bridge, переменные окружения через .env.
Результат:
version: '3.8'
services:
app:
build: .
ports:
- "8000:8000"
env_file: .env
depends_on:
- db
- redis
db:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: ${DB_PASSWORD}
redis:
image: redis:7
volumes:
- redisdata:/data
volumes:
pgdata:
redisdata:
6. Healthcheck в Dockerfile
Задача: Добавить проверку работоспособности контейнера.
Промт: Добавь HEALTHCHECK в Dockerfile для Node.js Express-приложения. Проверяй GET /health каждые 30 секунд, таймаут 10 секунд, 3 ретрая.
Результат:
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
7. Установка non-root пользователя для безопасности
Задача: Запускать контейнер от непривилегированного пользователя.
Промт: Создай Dockerfile для Python-приложения, где добавлен пользователь appuser с uid 1000, и приложение запускается от него.
Результат:
FROM python:3.12-slim
RUN useradd -m -u 1000 appuser
WORKDIR /home/appuser
COPY --chown=appuser:appuser . .
USER appuser
CMD ["python", "app.py"]
8. Кэширование зависимостей с помощью --mount=type=cache
Задача: Ускорить повторные сборки за счёт кэширования pip-пакетов.
Промт: Используй BuildKit для кэширования pip install в Dockerfile. Добавь флаг --mount=type=cache.
Результат:
# syntax=docker/dockerfile:1.4
FROM python:3.12-slim
RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt
Сборка ускоряется на 40-60%.
9. Использование ARG и BUILD_ARG для динамических версий
Задача: Собирать образ с разными версиями базового образа.
Промт: Создай Dockerfile с ARG PYTHON_VERSION=3.12, который подставляется в FROM. Покажи пример сборки с другой версией.
Результат:
ARG PYTHON_VERSION=3.12
FROM python:${PYTHON_VERSION}-slim
...
Сборка: docker build --build-arg PYTHON_VERSION=3.11 -t myapp .
10. Docker Compose для разработки с hot-reload
Задача: Настроить live-reload для React-приложения в контейнере.
Промт: Напиши docker-compose.yml для React-приложения с volumes для кода, порт 3000, команда npm start с WATCHPACK_POLLING=true.
Результат:
services:
frontend:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- WATCHPACK_POLLING=true
11. Изоляция зависимостей через pip freeze
Задача: Сгенерировать точный список зависимостей для воспроизводимости.
Промт: Создай скрипт, который из виртуального окружения генерирует requirements.txt с точными версиями.
Результат: pip freeze > requirements.txt. Рекомендуется фиксировать версии в Dockerfile.
12. Сборка образа с проверкой уязвимостей через Trivy
Задача: Интегрировать сканирование безопасности в CI/CD.
Промт: Напиши команду для сканирования собранного образа myapp:latest с помощью Trivy. Выведи только критические уязвимости.
Результат: trivy image --severity CRITICAL myapp:latest. По данным Aqua Security (2023), 40% образов содержат хотя бы одну критическую уязвимость.
13. Лучшие практики: использование --no-cache-dir и --no-install-recommends
Задача: Минимизировать размер образа.
Промт: Добавь флаги --no-cache-dir для pip и --no-install-recommends для apt-get. Объясни, как это влияет на размер.
Результат: Экономия до 50-100 МБ на образ.
14. Docker Compose с профилями для dev/staging/prod
Задача: Разделить сервисы по окружениям.
Промт: Создай docker-compose.yml с профилями: dev (все сервисы), prod (только app + db). Используй profiles.
Результат:
services:
app:
image: myapp
profiles: ["dev", "prod"]
redis:
image: redis:7
profiles: ["dev"]
Запуск: docker compose --profile dev up.
15. Использование LABEL для метаданных образа
Задача: Добавить информацию о версии, maintainer и дате сборки.
Промт: Добавь LABEL с maintainer, версией, build-date в Dockerfile.
Результат:
LABEL maintainer="dev@asibiont.com" version="1.0.0" build-date="2026-07-16"
16. Оптимизация COPY через .dockerignore и многослойность
Задача: Копировать только нужные файлы поэтапно.
Промт: Раздели COPY на два этапа: сначала requirements.txt, потом остальной код. Объясни, почему это ускоряет инкрементальную сборку.
Результат: Кэш для зависимостей не сбрасывается при изменении кода.
17. Docker Compose с переменными окружения из .env
Задача: Передать секреты и настройки через env_file.
Промт: Настрой docker-compose.yml для чтения переменных из .env файла. Пример с DB_PASSWORD и API_KEY.
Результат: Используйте env_file: .env в сервисах.
18. Сборка образа для ARM-архитектуры (Apple Silicon)
Задача: Собрать образ для amd64 и arm64 одновременно.
Промт: Напиши команду для создания мультиархитектурного образа с помощью docker buildx. Платформы: linux/amd64, linux/arm64.
Результат: docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest --push .
Заключение
Эти 18 промтов охватывают ключевые аспекты работы с Docker: от базового Dockerfile до продвинутой оптимизации и мультиархитектурной сборки. Используйте их как шпаргалку при создании своих образов. Помните: лучший образ — тот, который минимален, безопасен и быстро собирается. Экспериментируйте с multi-stage сборками, кэшированием и non-root пользователями — это даст ощутимый прирост в производительности и безопасности.
Комментарии