0Pricing
React Academy · レッスン

React/Next.js AppのDocker化

Next.js app用のmulti-stage Dockerfileを記述し、Docker Composeでローカル実行します。

「React/Next.js AppのDocker化」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

Dockerを使う理由

Dockerコンテナはアプリとその依存関係をまとめてパッケージ化するため、開発、ステージング、本番環境で一貫した動作を実現できます。同じイメージをどこでも実行できます。

シンプルな React SPA 用 Dockerfile

2 段階のビルドです。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;"]

SPA ルーティング用の Nginx 設定

すべてのルートで index.html を配信するように Nginx を設定します(クライアントサイドルーティングに対応します)。

# 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";
  }
}

Next.js スタンドアロンモード用 Dockerfile

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 を使用すると、1 つのコマンドでデータベースや 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

マルチプラットフォームビルド

Docker Buildx を使用すると、複数の CPU アーキテクチャ(M1 Mac やクラウド VM 向けの ARM64、ほとんどのサーバー向けの AMD64)用にイメージをビルドできます。

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

確認問題

React/Next.js アプリでマルチステージ Docker ビルドを使用するメリットは何ですか。

まとめ

マルチステージ Dockerfile を使用します。ビルドには Node.js を、配信には Nginx または node:alpine を使用します。Next.js の設定に output: 'standalone' を追加すると、最小構成のイメージを作成できます。ローカル開発には Docker Compose を使用し、シークレットは環境変数で実行時に渡します。また、ARM と AMD64 の互換性に対応するため、Buildx でマルチプラットフォームイメージをビルドします。

よくある質問

「React/Next.js AppのDocker化」レッスンは無料ですか?

はい。「React/Next.js AppのDocker化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「React/Next.js AppのDocker化」で何を学びますか?

Next.js app用のmulti-stage Dockerfileを記述し、Docker Composeでローカル実行します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「React/Next.js AppのDocker化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Vercelへのデプロイ:Zero-ConfigとPreview URLs
  2. AWS S3とCloudFrontでReact SPAをホスティング
  3. React/Next.js AppのDocker化
  4. React向けGitHub Actions CI/CD
← React Academyに戻る