Docker и Kubernetes без боли: 12 промтов, которые переводят DevOps с языка документации на человеческий

Docker и Kubernetes без боли: 12 промтов, которые переводят DevOps с языка документации на человеческий

Каждый, кто хоть раз собирал Docker-образ впервые, знает это чувство: docker build падает на шаге 7 из 12, лог обрывается на невнятной ошибке, а официальная документация отправляет читать три соседних раздела и RFC. Kubernetes добавляет к этому YAML с отступами, которые ломают деплой из-за одного пробела. А дебаг CI/CD в GitLab или GitHub Actions порой превращается в археологию: почему пайплайн зелёный локально и красный в CI?

Хорошая новость: LLM (ChatGPT, Claude, Gemini) уже сейчас снимают существенную часть этой рутины — если давать им правильные промты. Плохая новость: «помоги с Dockerfile» даёт результат уровня Stack Overflow 2019 года. Разница — в структуре запроса: роль, контекст, ограничения, формат вывода.

Ниже — 12 готовых промтов с пояснениями и примерами. Копируйте, подставляйте свои данные, адаптируйте. Все примеры команд и синтаксис проверены по официальной документации Docker (docs.docker.com) и Kubernetes (kubernetes.io/docs).

1. Dockerfile с нуля под конкретный стек

Задача: быстро получить production-ready Dockerfile без копипаста из туториалов 2018 года.

Промт:

Ты — senior DevOps-инженер. Напиши production-ready Dockerfile для [стек: например, Python 3.12 + FastAPI + uvicorn].
Требования:
- multi-stage build
- базовый образ: [python:3.12-slim / node:20-alpine и т.п.]
- непривилегированный пользователь (non-root)
- кэширование слоёв: сначала зависимости, потом код
- HEALTHCHECK
- .dockerignore тоже покажи
- итоговый размер образа — минимально возможный
В конце: 3 пункта, что можно улучшить, если нужен ещё меньший размер.

Почему работает: вы явно задаёте роль, стек, ограничения и просите объяснить trade-off. Модель не «фантазирует» стек, а следует чек-листу.

Пример использования: для FastAPI-сервиса получите примерно такой каркас:

FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --user -r requirements.txt

FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
RUN useradd -m appuser && chown -R appuser /app
USER appuser
HEALTHCHECK --interval=30s CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

2. Разбор ошибки docker build

Задача: превратить невнятный лог сборки в понятный диагноз и фикс.

Промт:

Вот лог ошибки docker build:
---
[вставь полный лог, включая последние 20 строк]
---
Мой Dockerfile:
---
[вставь Dockerfile]
---
1) Объясни простыми словами, что сломалось и на каком шаге.
2) Дай минимальный фикс (diff или исправленный фрагмент).
3) Назови 2 типичные причины этой же ошибки, чтобы я узнавал её в будущем.
4) Если проблема в кэше слоёв — покажи команду для его сброса.

Почему работает: вы даёте и лог, и Dockerfile — модель видит контекст, а не гадает. Пункт 3 превращает промт в обучающий.

Пример: ошибка failed to solve: process "/bin/sh -c apt-get install -y curl" did not complete successfully: exit code: 100 — модель объяснит, что apt не нашёл пакет или нет apt-get update перед install, и предложит добавить RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/*.

3. Отладка docker-compose

Задача: сервисы не видят друг друга, порты заняты, volumes не монтируются.

Промт:

Ты — DevOps. У меня docker-compose.yml с сервисами [перечисли: app, db, redis, nginx].
Файл:
---
[вставь docker-compose.yml]
---
Симптом: [например, app не может подключиться к db по hostname 'db']
Проверь:
- корректность network (все ли сервисы в одной сети)
- healthcheck и depends_on: condition
- проброс портов (ports vs expose)
- переменные окружения для подключения (host, port)
Выведи таблицу:

| проблема | где в файле | как исправить | и дай исправленный фрагмент.

Почему работает: вы просите таблицу — это заставляет модель систематизировать, а не выдавать поток сознания. Таблица из 5-7 строк легко проверяется глазами.

Пример: типичный кейс — app использует localhost:5432 вместо db:5432. Модель укажет на переменную DATABASE_URL и предложит postgresql://user:pass@db:5432/mydb.

4. Генерация Kubernetes Deployment + Service

Задача: получить корректные манифесты, которые реально применяются без ошибок валидации.

Промт:

Сгенерируй Kubernetes-манифесты (apiVersion apps/v1 и v1) для сервиса:
- образ: registry.example.com/app:1.4.2
- 3 реплики
- requests: cpu 100m, memory 128Mi; limits: cpu 500m, memory 512Mi
- livenessProbe и readinessProbe на /health (порт 8000)
- Service типа ClusterIP, порт 80 -> 8000
- labels: app=myapp, env=prod
Требования:
- используй recommended labels (kubernetes.io/name)
- добавь securityContext: runAsNonRoot, readOnlyRootFilesystem
- верни ОДИН YAML-файл с разделителем ---
В конце: как проверить через kubectl apply --dry-run=server.

Почему работает: --dry-run=server — реальная команда (см. kubernetes.io/docs/reference/kubectl/), она валидирует против живого API-сервера. Модель, которую вы просите её упомянуть, чаще выдаёт синтаксически чище манифесты.

Пример проверки:

kubectl apply --dry-run=server -f deployment.yaml

5. Диагностика CrashLoopBackOff

Задача: под падает и рестартится, а причина непонятна.

Промт:

Под в Kubernetes в состоянии CrashLoopBackOff. Вот вывод команд:
---
kubectl describe pod [имя]
[вставь]
---
kubectl logs [имя] --previous
[вставь]
---
Составь пошаговый план диагностики (что смотреть и в каком порядке: events, logs, probes, resources, image pull, configmap/secret).
Для каждого шага — конкретная команда kubectl.
В конце — 3 наиболее вероятные причины для моего случая с обоснованием.

Почему работает: kubectl logs --previous — настоящий флаг для логов предыдущего контейнера. Промт заставляет модель не гадать, а строить дерево диагностики.

Пример: частый сценарий — приложение стартует дольше, чем initialDelaySeconds в livenessProbe. Модель посоветует увеличить задержку или добавить startupProbe.

6. Объяснение «страшного» YAML

Задача: разобрать чужой Helm-чарт или манифест, который «работает, но непонятно почему».

Промт:

Объясни этот Kubernetes-манифест построчно человеку, который знает Docker, но только начинает с K8s:
---
[вставь YAML]
---
Формат: комментарий к каждой ключевой строке + блок «что произойдёт при kubectl apply» (какие объекты создадутся, в каком порядке).
Отдельно объясни: зачем здесь [initContainers / volumes / affinity] и что будет, если убрать.

Почему работает: «человеку, который знает Docker, но только начинает» — это точная калибровка уровня. Без неё модель либо льёт воду, либо сыпет терминами.

7. CI/CD пайплайн для GitHub Actions

Задача: собрать пайплайн build → test → push в registry → деплой в кластер.

Промт:

Напиши GitHub Actions workflow (.github/workflows/deploy.yml) для проекта [стек].
Этапы:
1) checkout + setup [языка]
2) кэш зависимостей
3) тесты
4) docker buildx build и push в [ghcr.io / Docker Hub] с тегом = git SHA
5) деплой в Kubernetes через kubectl set image (или helm upgrade)
Требования:
- секреты через ${{ secrets.* }}
- concurrency для отмены старых запусков
- матрица тестов: [версии]
- комментарии к неочевидным шагам
В конце: список секретов, которые нужно завести в репозитории.

Почему работает: concurrency — реальный ключ в GitHub Actions (docs.github.com/actions), тег по git SHA — стандартная практика immutable-образов. Модель, которую просят перечислить секреты, не забудет про GITHUB_TOKEN.

8. GitLab CI: разбор упавшего джоба

Задача: пайплайн падает в CI, но проходит локально.

Промт:

Ты — CI/CD инженер. Джоб [имя] в GitLab CI падает, локально всё работает.
.gitlab-ci.yml:
---
[вставь]
---
Лог джоба (tail -100):
---
[вставь]
---
Верни:
1) гипотезы различий локально vs CI (окружение, переменные, кэш, права, сеть)
2) для каждой — как проверить (конкретная команда или изменение в yml)
3) исправленный фрагмент .gitlab-ci.yml

Почему работает: «локально vs CI» — известный класс проблем (другой образ, другой пользователь, отсутствие переменной). Промт явно просит сравнить окружения, а не просто «починить».

9. Секреты и переменные окружения — аудит

Задача: не закоммитить пароль и правильно пробросить секреты в K8s/Docker.

Промт:

Проведи аудит безопасности конфигурации:
---
[вставь docker-compose.yml / deployment.yaml / .env.example]
---
Найди:
- захардкоженные секреты (пароли, токены, ключи)
- секреты в ENV вместо Secret/K8s Secret
- отсутствие .gitignore для .env
Для каждой находки: severity (high/medium/low), чем опасно, как исправить (пример с docker secrets или K8s Secret).
Верни таблицу:

| находка | severity | фикс |

Почему работает: формат «severity + фикс» — стандарт security-ревью. Таблица удобна для трекера задач.

10. Оптимизация образа: «почему он весит 2 ГБ»

Задача: образ раздулся, pull в кластере занимает минуты.

Промт:

Мой Docker-образ весит [X ГБ]. Dockerfile:
---
[вставь]
---
1) оцени, какие слои дают основной вклад (обоснованно)
2) предложи 5 конкретных оптимизаций с ожидаемым эффектом
3) покажи diff Dockerfile
4) какие инструменты проверить размер слоёв (dive, docker history — с командой)

Пром почему полезен: docker history <image> — реальная команда для просмотра слоёв, dive — реальный инструмент (github.com/wagoodman/dive). Модель, которую просят конкретные команды, реже уходит в абстракции.

11. Перевод «с Docker Compose на Kubernetes»

Задача: переехать с compose на кластер без сюрпризов.

Промт:

У меня docker-compose.yml:
---
[вставь]
---
Составь план миграции в Kubernetes:
- какие K8s-объекты соответствуют каждому сервису (Deployment/StatefulSet/Service/Ingress/PVC/ConfigMap/Secret)
- что нельзя перенести 1:1 и почему (volumes, depends_on, build)
- порядок применения (что раньше: Secret, ConfigMap, DB, app)
- чек-лист «готово к прод» (probes, resources, PDB, HPA)
Выведи таблицу соответствия и пошаговый план.

Почему работает: depends_on в compose не имеет прямого аналога в K8s — модель, которую просят объяснить «что нельзя 1:1», честно назовёт это ограничение вместо выдумки.

12. Регулярный «health-check» инфраструктуры

Задача: периодически прогонять конфиги на типовые ошибки и антипаттерны.

Промт:

Выступи в роли ревьюера production-инфраструктуры. Проверь набор файлов:
---
[вставь Dockerfile, compose, k8s-манифесты, CI-yml]
---
Дай отчёт по чек-листу:
- нет ли :latest тегов в проде
- заданы ли resources.requests/limits
- есть ли liveness/readiness probes
- non-root пользователь в контейнере
- секреты не в открытом виде
- есть ли откат (rollback) в CI/CD
Каждый пункт: ✅/❌ + строка с местом проблемы + рекомендация.

Почему работает: чек-лист — это способ зафиксировать экспертизу в промте. Такой отчёт можно гонять раз в спринт как «линтер» инфраструктуры.

Как адаптировать эти промты под себя

Что менять Зачем
Стек и версии модель не знает ваш проект — задайте точные версии (Python 3.12, Node 20)
Формат вывода таблица, diff, чек-лист — просите структуру под вашу задачу
Уровень объяснений «объясни новичку в K8s» vs «кратко для senior»
Ограничения «без Helm», «только стандартная библиотека», «без внешних зависимостей»

Пара практических советов. Во-первых, всегда давайте модели полный контекст: лог + конфиг + симптом. Половина плохих ответов — из-за неполного ввода. Во-вторых, проверяйте команды и синтаксис по официальной документации: LLM ошибаются в деталях, особенно в новых версиях K8s и в специфичных флагах. В-третьих, храните удачные промты в репозитории рядом с конфигами — через месяц вы скажете себе спасибо.

Docker и Kubernetes не станут проще, но перестанут быть «чёрным ящиком». Промт — это не замена пониманию, а ускоритель: он превращает невнятную ошибку в гипотезу, а гипотезу — в проверяемый шаг. Начните с одного промта из списка — например, с разбора упавшего docker build — и посмотрите, сколько времени освободится. А если хотите системно прокачать DevOps-базу, совмещайте такие промты с практикой на реальных конфигах: именно повторяемые сценарии (сборка, деплой, дебаг) дают навык, который остаётся с вами.

Полезные источники:
- Docker Docs: docs.docker.com (Dockerfile reference, buildx, compose)
- Kubernetes Docs: kubernetes.io/docs (kubectl, probes, resources)
- GitHub Actions: docs.github.com/actions
- GitLab CI: docs.gitlab.com/ee/ci/
- dive (анализ слоёв образа): github.com/wagoodman/dive

← Все статьи

Комментарии

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

Промты для SEO в 2026: как заставить ChatGPT работать за младшего аналитика — семантика, аудит, контент

17 октября 2026

Промты, которые верстают, рефакторят и деплоят: как отдать веб-разработку ИИ, не потеряв контроль

17 октября 2026

TypeScript-промты, которые реально ускоряют full-stack: Next.js, Prisma и tRPC в одном наборе

17 октября 2026

Docker, Kubernetes и Terraform под диктовку: 12 промтов, с которых я начинаю любой инфраструктурный проект

17 октября 2026

Красная команда из одного человека: как я превратил LLM в пентестера, который ловит BOLA до продакшена

17 октября 2026

Arduino, ESP32 и IoT без паяльника: 15 промтов, с которыми прошивка, схема и телеметрия собираются за вечер

17 октября 2026

20 промтов для DevSecOps: ищем дыры в Docker-контейнерах и OWASP-топ-10 без команды Red Team

17 октября 2026

Даташит на 600 страниц за 15 минут: промты, с которыми Arduino, ESP32 и STM32 перестают быть чёрными ящиками

17 октября 2026

ChatGPT как DevOps-инженер: 12 промтов, которые убирают ночные дежурства

17 октября 2026