React Academy · leksjon

Dockerisere en React/Next.js-app

Skriv en Dockerfile med flere byggetrinn for en Next.js-app, og kjør den lokalt med Docker Compose.

Leksjon 3 av 412 trinn

Dockerisere en React/Next.js-app er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Hvorfor Docker?

Docker-containere pakker appen og avhengighetene sammen, slik at du får forutsigbar atferd på tvers av utvikling, staging og produksjon. Det samme imaget kjører overalt.

Dockerfile for en vanlig React-SPA

Et bygg i to trinn: Node.js til bygging og Nginx til å levere det statiske resultatet.

# 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-konfigurasjon for SPA-ruting

Konfigurer Nginx til å levere index.html for alle ruter (støtte for ruting på klientsiden).

# 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 for Next.js i standalone-modus

Next.js 12+ støtter output: 'standalone', som kopierer bare de nødvendige filene for et minimalt produksjonsimage.

// 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

Utelat unødvendige filer fra Docker-byggkonteksten for å gjøre bygginger raskere og redusere image-størrelsen.

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

Bygging og kjøring

Bygg imaget og kjør det lokalt.

# 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 for lokal utvikling

Bruk Docker Compose til å kjøre appen sammen med avhengighetene (database, Redis) med én kommando.

# 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:

Helsesjekker

Legg til en helsesjekk i Dockerfile, slik at orkestreringsverktøy vet når containeren er klar.

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

Miljøvariabler ved kjøring

Angi miljøvariabler når docker run kjøres eller via --env-file. Legg aldri hemmeligheter inn i imaget.

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

Bygging for flere plattformer

Bygg imagene for flere CPU-arkitekturer (ARM64 for M1-Macer og sky-VM-er, AMD64 for de fleste servere) med Docker Buildx.

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

Rask kontroll

Hva er fordelen ved å bruke Docker-bygg i flere trinn for en React/Next.js-app?

Oppsummering

Bruk Dockerfile-filer med flere trinn: Node.js til bygging og Nginx eller node:alpine til levering. Legg til output: 'standalone' i Next.js-konfigurasjonen for minimale imagestørrelser. Bruk Docker Compose til lokal utvikling, angi hemmeligheter ved kjøring via miljøvariabler, og bygg images for flere plattformer med Buildx for kompatibilitet med ARM og AMD64.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Dockerisere en React/Next.js-app» gratis?

Ja – hele teksten i «Dockerisere en React/Next.js-app» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Dockerisere en React/Next.js-app»?

Skriv en Dockerfile med flere byggetrinn for en Next.js-app, og kjør den lokalt med Docker Compose. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Dockerisere en React/Next.js-app»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Rulle ut til Vercel: null konfigurasjon og forhåndsvisnings-URL-er
  2. Drifte en React-SPA på AWS S3 og CloudFront
  3. Dockerisere en React/Next.js-app
  4. GitHub Actions CI/CD for React
← Tilbake til React Academy