TechLead
Lección 3 de 18
5 min de lectura
Docker

Fundamentos de Dockerfile

Domina la escritura de Dockerfiles para construir imágenes personalizadas con buenas prácticas para capas y caché

¿Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene un conjunto de instrucciones que Docker usa para construir una imagen. Cada instrucción crea una nueva capa en la imagen, y Docker almacena estas capas en caché para acelerar las construcciones posteriores.

Instrucciones Básicas del Dockerfile

FROM — Establecer Imagen Base

# Todo Dockerfile comienza con FROM
FROM node:20-alpine

WORKDIR — Establecer Directorio de Trabajo

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

COPY — Copiar Archivos

# Copiar archivos del host al contenedor
COPY package.json package-lock.json ./
COPY src/ ./src/
COPY . .

RUN — Ejecutar Comandos

# Instalar dependencias
RUN npm ci --production

# Ejecutar múltiples comandos (crea una sola capa)
RUN apt-get update && \
    apt-get install -y curl && \
    rm -rf /var/lib/apt/lists/*

CMD y ENTRYPOINT — Definir Comando de Inicio

# CMD — comando por defecto (se puede sobreescribir)
CMD ["node", "server.js"]

# ENTRYPOINT — siempre se ejecuta
ENTRYPOINT ["node"]
CMD ["server.js"]

Ejemplo Completo: Aplicación Node.js

# Usar imagen oficial de Node.js Alpine
FROM node:20-alpine

WORKDIR /app

# Copiar archivos de dependencias primero (mejor caché)
COPY package.json package-lock.json ./

# Instalar dependencias
RUN npm ci --production

# Copiar código de la aplicación
COPY . .

ENV NODE_ENV=production
EXPOSE 3000

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

El Archivo .dockerignore

# .dockerignore
node_modules
.git
.env
Dockerfile
docker-compose.yml
README.md

Construir Imágenes

# Construir una imagen desde el directorio actual
docker build -t miapp:latest .

# Construir sin caché
docker build --no-cache -t miapp .

Consejos de Caché de Capas

  • ✅ Copia package.json antes del código fuente para mejor caché
  • ✅ Combina comandos RUN relacionados para reducir capas
  • ✅ Ordena las instrucciones de menor a mayor frecuencia de cambio
  • ✅ Usa .dockerignore para excluir archivos innecesarios

Continuar Aprendiendo