50% OFF Plus
--:--:--
¡Obtener!

Dockerfile node

Intermedio
Node
Node
Actualizado: 20/06/2025

¡Desbloquea el curso de Node completo!

IA
Ejercicios
Certificado
Entrar

Mira la lección en vídeo

Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.

Desbloquear Plan Plus

Dockerfile para Node.js

Un Dockerfile es un archivo de texto que contiene una serie de instrucciones para construir una imagen de Docker de forma automatizada. Para aplicaciones Node.js, este archivo define el entorno de ejecución, las dependencias y la configuración necesaria para que nuestra aplicación funcione correctamente dentro de un contenedor.

Requisitos previos

Antes de crear nuestro Dockerfile, necesitamos tener Docker instalado en nuestro sistema. Docker está disponible para Windows, macOS y Linux:

  • Windows y macOS: Descarga Docker Desktop desde el sitio oficial de Docker
  • Linux (Ubuntu/Debian):
# Actualizar el sistema
sudo apt update

# Instalar Docker
sudo apt install docker.io

# Iniciar el servicio Docker
sudo systemctl start docker
sudo systemctl enable docker

# Añadir tu usuario al grupo docker (opcional, para evitar usar sudo)
sudo usermod -aG docker $USER

Para verificar que Docker está correctamente instalado, ejecuta:

docker --version

Estructura básica de un Dockerfile para Node.js

Vamos a crear un Dockerfile paso a paso para una aplicación Node.js. Primero, necesitamos una aplicación básica de ejemplo:

package.json:

{
  "name": "mi-app-node",
  "version": "1.0.0",
  "description": "Aplicación Node.js de ejemplo",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "http": "^0.0.1-security"
  }
}

server.js:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('¡Hola desde Node.js en Docker!\n');
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`Servidor ejecutándose en puerto ${PORT}`);
});

Creación del Dockerfile

Ahora creamos nuestro Dockerfile en la raíz del proyecto:

# Usar la imagen oficial de Node.js versión 22 LTS
FROM node:22-alpine

# Establecer el directorio de trabajo dentro del contenedor
WORKDIR /app

# Copiar los archivos de dependencias
COPY package*.json ./

# Instalar las dependencias
RUN npm ci --only=production

# Copiar el resto del código de la aplicación
COPY . .

# Crear un usuario no privilegiado para ejecutar la aplicación
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001

# Cambiar la propiedad de los archivos al usuario nodejs
RUN chown -R nodejs:nodejs /app
USER nodejs

# Exponer el puerto en el que la aplicación escucha
EXPOSE 3000

# Comando para ejecutar la aplicación
CMD ["npm", "start"]

Explicación de las instrucciones del Dockerfile

Cada línea del Dockerfile tiene un propósito específico:

  • FROM node:22-alpine: Utiliza la imagen base oficial de Node.js versión 22 con Alpine Linux, que es más ligera
  • WORKDIR /app: Establece el directorio de trabajo donde se ejecutarán los comandos posteriores
  • COPY package.json ./*: Copia los archivos de configuración de npm antes que el resto del código
  • RUN npm ci --only=production: Instala las dependencias de producción de forma optimizada
  • COPY . .: Copia todo el código fuente al contenedor
  • RUN addgroup/adduser: Crea un usuario no privilegiado por seguridad
  • USER nodejs: Cambia al usuario no privilegiado para ejecutar la aplicación
  • EXPOSE 3000: Documenta qué puerto utiliza la aplicación
  • CMD ["npm", "start"]: Define el comando por defecto para ejecutar la aplicación

Archivo .dockerignore

Es importante crear un archivo .dockerignore para excluir archivos innecesarios:

node_modules
npm-debug.log
.git
.gitignore
README.md
.env
coverage
.nyc_output

Construcción de la imagen Docker

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Para construir la imagen desde nuestro Dockerfile, ejecutamos:

# Construir la imagen con un nombre y etiqueta
docker build -t mi-app-node:1.0.0 .

# Verificar que la imagen se creó correctamente
docker images

Para ejecutar el contenedor localmente y probar la aplicación:

# Ejecutar el contenedor mapeando el puerto 3000
docker run -p 3000:3000 mi-app-node:1.0.0

# Ejecutar en segundo plano (detached)
docker run -d -p 3000:3000 --name mi-contenedor mi-app-node:1.0.0

Subida a Docker Hub

Para compartir nuestra imagen en Docker Hub, seguimos estos pasos:

1. Crear cuenta en Docker Hub:

Regístrate en hub.docker.com si no tienes cuenta.

2. Iniciar sesión desde la terminal:

docker login

3. Etiquetar la imagen con tu nombre de usuario de Docker Hub:

# Formato: docker tag imagen-local usuario/repositorio:etiqueta
docker tag mi-app-node:1.0.0 tuusuario/mi-app-node:1.0.0
docker tag mi-app-node:1.0.0 tuusuario/mi-app-node:latest

4. Subir la imagen al registro:

# Subir versión específica
docker push tuusuario/mi-app-node:1.0.0

# Subir versión latest
docker push tuusuario/mi-app-node:latest

Optimizaciones para producción

Para aplicaciones de producción, considera estas mejoras en tu Dockerfile:

FROM node:22-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

FROM node:22-alpine AS production

WORKDIR /app
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001

COPY --from=builder /app/node_modules ./node_modules
COPY --chown=nodejs:nodejs . .

USER nodejs
EXPOSE 3000

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD node healthcheck.js

CMD ["node", "server.js"]

Esta versión optimizada utiliza construcción multi-etapa para reducir el tamaño final de la imagen y añade un healthcheck para monitorear el estado del contenedor en producción.

Aprendizajes de esta lección de Node

  • Comprender la estructura básica y las instrucciones esenciales de un Dockerfile para Node.js.
  • Aprender a construir y ejecutar imágenes Docker para aplicaciones Node.js.
  • Configurar un entorno seguro usando usuarios no privilegiados dentro del contenedor.
  • Implementar buenas prácticas como el uso de .dockerignore y multi-etapas para optimizar imágenes.
  • Conocer el proceso para subir imágenes Docker a Docker Hub y compartirlas.

Completa este curso de Node y certifícate

Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración