0Pricing
React Academy · Lección

Contenerizar una aplicación React/Next.js

Escriba un Dockerfile de varias etapas para una aplicación Next.js y ejecútela localmente con Docker Compose.

Contenerizar una aplicación React/Next.js es una lección gratuita de React Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

¿Por qué Docker?

Los contenedores de Docker empaquetan su aplicación y sus dependencias, lo que garantiza un comportamiento coherente en desarrollo, staging y producción. La misma imagen se ejecuta en cualquier entorno.

Dockerfile para una SPA de React simple

Una compilación en dos etapas: Node.js para compilar y Nginx para servir la salida estática.

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

Configuración de Nginx para el enrutamiento de SPA

Configure Nginx para servir index.html en todas las rutas (compatibilidad con el enrutamiento del cliente).

# 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 de Next.js en modo standalone

Next.js 12 y versiones posteriores admiten output: 'standalone', que copia únicamente los archivos necesarios para obtener una imagen de producción mínima.

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

Excluya los archivos innecesarios del contexto de compilación de Docker para acelerar las compilaciones y reducir el tamaño de la imagen.

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

Compilación y ejecución

Compile la imagen y ejecútela localmente.

# 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 para desarrollo local

Use Docker Compose para ejecutar la aplicación junto con sus dependencias (base de datos y Redis) mediante un único comando.

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

Comprobaciones de estado

Añada una comprobación de estado al Dockerfile para que los orquestadores sepan cuándo está listo el contenedor.

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

Variables de entorno en tiempo de ejecución

Pase las variables de entorno al ejecutar docker run o mediante --env-file. Nunca incluya secretos en la imagen.

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

Compilaciones para múltiples plataformas

Compile imágenes para múltiples arquitecturas de CPU (ARM64 para Mac con M1 y máquinas virtuales en la nube, AMD64 para la mayoría de los servidores) con Docker Buildx.

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

Comprobación rápida

¿Cuál es la ventaja de usar compilaciones de Docker en varias etapas para una aplicación de React/Next.js?

Resumen

Use Dockerfiles en varias etapas: Node.js para compilar y Nginx o node:alpine para servir. Añada output: 'standalone' a la configuración de Next.js para obtener imágenes mínimas. Use Docker Compose para el desarrollo local, pase los secretos en tiempo de ejecución mediante variables de entorno y compile imágenes para varias plataformas con Buildx, de modo que sean compatibles con ARM y AMD64.

Preguntas frecuentes

¿La lección «Contenerizar una aplicación React/Next.js» es gratis?

Sí — el texto completo de «Contenerizar una aplicación React/Next.js» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Contenerizar una aplicación React/Next.js»?

Escriba un Dockerfile de varias etapas para una aplicación Next.js y ejecútela localmente con Docker Compose. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Contenerizar una aplicación React/Next.js»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Desplegar en Vercel: configuración cero y URL de preview
  2. Alojar una SPA de React en AWS S3 y CloudFront
  3. Contenerizar una aplicación React/Next.js
  4. CI/CD de GitHub Actions para React
← Volver a React Academy