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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Vercelへのデプロイ:Zero-ConfigとPreview URLs
- AWS S3とCloudFrontでReact SPAをホスティング
- React/Next.js AppのDocker化
- React向けGitHub Actions CI/CD