4. Dockerfiles y construcción de imágenes

Uno de los pilares fundamentales de Docker es la posibilidad de definir entornos reproducibles mediante archivos Dockerfile. Estas instrucciones permiten construir imágenes personalizadas desde una base determinada.


¿Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene las instrucciones necesarias para construir una imagen de Docker. Se utiliza con el comando docker build.

Ejemplo mínimo:

FROM alpine:latest
RUN apk add --no-cache curl
CMD ["curl", "https://example.com"]

Este archivo:


Instrucciones comunes en un Dockerfile

Instrucción Descripción
FROM Imagen base
RUN Ejecuta comandos en la construcción
CMD Comando por defecto del contenedor
COPY Copia archivos del host a la imagen
ADD Similar a COPY pero acepta URLs y extrae archivos comprimidos
ENV Define variables de entorno
EXPOSE Documenta puertos expuestos
WORKDIR Define el directorio de trabajo
ENTRYPOINT Comando principal, más estricto que CMD

Construcción de una imagen personalizada

docker build -t mi-imagen-personalizada .

Esto busca un Dockerfile en el directorio actual y construye la imagen con la etiqueta especificada.


Buenas prácticas

Ejemplo optimizado:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]

Multi-stage builds

Permiten construir una imagen en varias etapas para reducir el tamaño final. Muy útil en compilaciones con herramientas como Node.js, Go, Rust, etc.

FROM node:20 as build
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

Variables y contexto


05 Docker Compose