AIAI University/ Stadika Смотреть курсы
AI University / Промпты / Программисту
Программисту

Промпт: dockerfile и docker-compose для сервиса

Разбор проблем Dockerfile, многоэтапная сборка, .dockerignore и compose для локальной разработки. Готовый промт на русском с ответами нейросетей: посмотрите, что выдают GigaChat, ChatGPT, Claude и Gemini, и откройте текст промпта, чтобы запускать его со своими данными.

Проверено на: GigaChatChatGPTClaudeGemini · Обновлено 01.10.2026

Текст промпта

Текст промпта открывается с доступом к библиотеке

Ответы нейросетей ниже получены этим промптом на примере из таблицы. Чтобы скопировать промпт и запускать его со своими данными, откройте доступ ко всем промптам или полный доступ к AI University.

Разовый платёж, без подписки. Новые промпты входят в доступ.

Что подставить в промт

ПолеПример
{service}API на Node.js 20 и TypeScript (сборка через tsc), зависимости PostgreSQL и Redis
{dockerfile}FROM node:latest
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
ENV DATABASE_URL=postgres://admin:admin123@db:5432/app
EXPOSE 3000
CMD npm run start
{requirements}продакшен-образ меньше 250 МБ, запуск не от root, сборка в GitLab CI с кэшем, локально нужны PostgreSQL 16 и Redis 7

Ответы нейросетей на этот промпт

Один и тот же промпт с примером выше, ответы без правок: выберите нейросеть, которой пользуетесь, и посмотрите, что она выдаёт.

GigaChat 2 Max06.10.2026
Анализ проблем текущего Dockerfile
1. Безопасность
2. Размер образа
3. Кэширование слоев
4. Воспроизводимость сборки

Многоэтапный исправленный Dockerfile
# Stage 1: Build stage
FROM node:20-bullseye-slim AS builder

# Устанавливаем пакеты до копирования остальных файлов, чтобы эффективно использовать кэширование слоев
WORKDIR /app
COPY package.json yarn.lock tsconfig.json ./
RUN npm ci --only=production # Используем строгую команду установки пакетов без dev-зависимостей

# Копируем исходники приложения
COPY src ./src
RUN npm run build

# Stage 2: Final runtime image
FROM node:20-alpine

# Создаем непривилегированного пользователя и группу
ARG USER_ID=1000
ARG GROUP_ID=1000
RUN addgroup -g ${GROUP_ID} appuser && \
    adduser -u ${USER_ID} -D -S -G appuser appuser

# Установливаем рабочую директорию и меняем владельца
WORKDIR /home/appuser/app
RUN chown -R appuser:appuser /home/appuser/app

# Переносим файлы из билд-стадии
COPY --from=builder --chown=appuser:appuser /app/dist/ ./dist
COPY --from=builder --chown=appuser:appuser /app/node_modules/ ./node_modules

# Запускаем сервис от имени непривилегированного пользователя
USER appuser
ENV NODE_ENV=production
ENV PORT=3000
EXPOSE 3000

# Команда запуска сервера
CMD ["npm", "run", "start"]

Файл .dockerignore

Чтобы уменьшить объём образа и ускорить процесс сборки, важно игнорировать ненужные файлы:

.git
node_modules
coverage
*.log
.DS_Store
Thumbs.db
.idea
.env*
Dockerfile
docker-compose.*

docker-compose.yml для локальной разработки
version: '3.8'
services:
  api:
    container_name: my-node-api
    build:
      context: .
      args:
        USER_ID: 1000
        GROUP_ID: 1000
    environment:
      DATABASE_URL: postgresql://admin:admin123@db:5432/app?schema=public
      REDIS_HOST: redis
      REDIS_PORT: 6379
      NODE_ENV: development
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    command: npm run dev # Если используется режим разработки

  db:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin123
      POSTGRES_DB: app
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "admin", "-d", "app"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: always
    expose:
      - "6379"
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  pgdata:

Сборка и проверка размера образа

Собираем образ:

docker build -t my-node-app .

Проверяем размер собранного образа:

docker images | grep my-node-app

Передача секретов

Передавайте секреты через переменные окружения либо используйте механизм Docker Secrets. Например, для local development вы можете создать файл .env с необходимыми параметрами, а в продакшене передать эти данные через Kubernetes Secret или аналогичный инструмент.

Пример команды запуска контейнера с использованием переменных среды:

docker run -p 3000:3000 -e DATABASE_URL="..." -e REDIS_HOST="..." my-node-app

Используя этот подход, вы сможете улучшить безопасность, оптимизировать размер образов и обеспечить стабильное воспроизведение сборок.

Советы

Как пользоваться
  1. Откройте доступ и скопируйте промпт кнопкой выше.
  2. Замените поля в фигурных скобках своими данными.
  3. Отправьте в нейросеть и сравните ответ с примером на этой странице.

Подробнее о структуре хорошего запроса: гид AI University.

Похожие промпты

ПрограммистуБесплатно Найти причину ошибки по стектрейсу и логамВероятная причина плавающей ошибки, гипотезы с проверками, исправление и защита от повторения. 4 ответаОткрытьПрограммистуБесплатно Ускорить медленный SQL-запрос по EXPLAINРазбор плана выполнения, индексы и переписанный запрос, безопасное создание индекса на проде. 4 ответаОткрытьПрограммистуБесплатно Ревью pull request по diffРевью изменений с приоритетами: блокирующие ошибки, безопасность, тесты, готовые комментарии. 4 ответаОткрыть

Все 435 промптов и 6 наборов

172 промптов открыты бесплатно. Остальные и наборы-цепочки открывает доступ к библиотеке за 1 490 ₽. Полный доступ за 4 900 ₽: все курсы AI University на русском и библиотека промптов. Разовый платёж, новые промпты входят.