0Pricing
React Academy · Урок

Контейнеризация приложения React/Next.js

Напишите многоэтапный Dockerfile для приложения Next.js и запустите его локально с помощью Docker Compose.

«Контейнеризация приложения React/Next.js» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Зачем нужен Docker?

Контейнеры Docker упаковывают приложение вместе с его зависимостями, обеспечивая одинаковое поведение в средах разработки, подготовки и эксплуатации. Один и тот же образ запускается везде.

Dockerfile для обычного React SPA

Сборка в два этапа: Node.js используется для сборки, а Nginx — для раздачи статического результата.

# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2: Serve with Nginx
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Конфигурация Nginx для маршрутизации SPA

Настройте Nginx так, чтобы он отдавал index.html для всех маршрутов (для поддержки маршрутизации на стороне клиента).

# nginx.conf
server {
  listen 80;
  root /usr/share/nginx/html;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html; # SPA routing
  }

  location ~* \.(js|css|png|jpg|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
  }
}

Dockerfile Next.js в автономном режиме

В Next.js 12 и более поздних версиях поддерживается output: 'standalone', который копирует только необходимые файлы для создания минимального рабочего образа.

// next.config.js
module.exports = { output: 'standalone' };

# Dockerfile (Next.js standalone)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

.dockerignore

Исключайте ненужные файлы из контекста сборки Docker, чтобы ускорить сборку и уменьшить размер образа.

node_modules
.next
dist
.env*
.git
README.md
*.test.ts

Сборка и запуск

Соберите образ и запустите его локально.

# Build:
docker build -t my-next-app .

# Run:
docker run -p 3000:3000 -e DATABASE_URL=postgres://... my-next-app

# Check size:
docker images my-next-app

Docker Compose для локальной разработки

Используйте Docker Compose, чтобы запускать приложение вместе с его зависимостями (базой данных и Redis) одной командой.

# docker-compose.yml
services:
  web:
    build: .
    ports: ['3000:3000']
    environment:
      DATABASE_URL: postgresql://postgres:password@db:5432/myapp
    depends_on: [db]
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Проверки работоспособности

Добавьте проверку работоспособности в Dockerfile, чтобы оркестраторы знали, когда контейнер готов.

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/api/health || exit 1

Переменные окружения во время выполнения

Передавайте переменные окружения во время выполнения docker run или через --env-file. Никогда не встраивайте секреты в образ.

docker run -p 3000:3000 \
  --env-file .env.production \
  my-next-app

Мультиплатформенная сборка

Собирайте образы для нескольких архитектур CPU (ARM64 для компьютеров Mac с M1 и облачных виртуальных машин, AMD64 для большинства серверов) с помощью Docker Buildx.

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myregistry/my-next-app:latest \
  --push .

Быстрая проверка

Какое преимущество даёт использование многоэтапной сборки Docker для приложения React/Next.js?

Итоги

Используйте многоэтапные Dockerfile: Node.js для сборки, Nginx или node:alpine для раздачи. Добавляйте output: 'standalone' в конфигурацию Next.js для создания минимальных образов. Используйте Docker Compose для локальной разработки, передавайте секреты во время выполнения через переменные окружения и собирайте мультиплатформенные образы с помощью Buildx для совместимости с ARM и AMD64.

Часто задаваемые вопросы

Урок «Контейнеризация приложения React/Next.js» бесплатный?

Да — полный текст урока «Контейнеризация приложения React/Next.js» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Контейнеризация приложения React/Next.js»?

Напишите многоэтапный Dockerfile для приложения Next.js и запустите его локально с помощью Docker Compose. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Контейнеризация приложения React/Next.js»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Развёртывание в Vercel: нулевая настройка и предварительные URL
  2. Размещение React SPA в AWS S3 и CloudFront
  3. Контейнеризация приложения React/Next.js
  4. CI/CD React с GitHub Actions
← Назад к React Academy