6 prácticas Docker para imágenes listas para producción

Clase 15 de 34Curso de Docker Avanzado

Contenido del curso

Optimización Avanzada en Docker

Resumen

Construye imágenes de Docker listas para producción con pasos claros y seguros. Aquí encontrarás las mejores prácticas esenciales para asegurar estabilidad, rendimiento y equipos más felices, con ejemplos de Dockerfile y comandos prácticos.

¿Qué prácticas de Docker aseguran imágenes listas para producción?

Adopta un enfoque profesional desde el inicio. Las siguientes prácticas priorizan estabilidad, rendimiento y seguridad, minimizando sorpresas en despliegues y facilitando la colaboración del equipo.

¿Por qué elegir imágenes oficiales del Docker Hub?

Usa imágenes oficiales como base. Son mantenidas, documentadas y auditadas por la comunidad y proveedores, lo que reduce riesgos.

  • Evita imágenes de origen desconocido.
  • Gana actualizaciones y parches confiables.
  • Mejora la trazabilidad del origen.

Ejemplo de pull seguro.

docker pull ubuntu:22.04

¿Cómo fijar etiquetas y evitar latest en la imagen base?

Evita latest. Fija una versión estable para prevenir cambios inesperados que rompan tu build. Elige etiquetas como ubuntu:20.04, 22.04 o 24.04.

Ejemplo con versiones fijas.

# Evita: FROM ubuntu:latest FROM ubuntu:22.04

¿Cómo optimizar tamaño y rendimiento sin sacrificar estabilidad?

Reduce el tamaño cuando ayude, pero prioriza el rendimiento. Imágenes como Alpine son famosas por su tamaño (~5 MB), útiles para acelerar descargas y despliegues, siempre considerando el desempeño de tu app.

¿Cuándo usar Alpine y qué considerar del rendimiento?

Al usar Alpine, evalúa si tus dependencias funcionan bien y sin penalizaciones de performance. Si tu carga es intensiva, prioriza el desempeño antes que el tamaño.

Ejemplo mínimo con Alpine.

FROM alpine:3.19 RUN apk add --no-cache ca-certificates CMD ["sh", "-c", "echo imagen ligera lista"]

¿Cómo aplicar builds multi stage para imágenes pequeñas y legibles?

Un Dockerfile multi stage mantiene el build ordenado y produce imágenes finales más pequeñas, separando la fase de compilación de la de ejecución. Facilita la lectura y evita arrastrar herramientas innecesarias.

Ejemplo multi stage genérico.

# Etapa de build FROM ubuntu:22.04 AS build RUN apt-get update && apt-get install -y build-essential WORKDIR /app # Copia y compila tu código aquí # RUN make build # Etapa final mínima FROM ubuntu:22.04 WORKDIR /app # COPY --from=build /app/bin/app ./app CMD ["sh", "-c", "echo imagen final optimizada"]

¿Qué mantenimientos y seguridad refuerzan tu Dockerfile?

La limpieza periódica y el principio de mínimos privilegios fortalecen tu flujo de trabajo. Además, excluye archivos innecesarios del build context para acelerar y reducir capas.

¿Cómo limpiar caché y liberar espacio con prune?

Usa prune con regularidad para recuperar espacio en disco y limpiar cachés que se acumulan por uso cotidiano.

Comandos útiles.

# Limpia recursos no usados: contenedores detenidos, redes, imágenes dangling y caché. docker system prune -f # Limpia caché de build. docker builder prune -f

¿Cómo crear y usar un usuario no root en el Dockerfile?

Evita ejecutar como root. Crea un usuario con privilegios mínimos y úsalo en tiempo de ejecución para elevar la seguridad.

Ejemplo con usuario no root.

FROM ubuntu:22.04 RUN useradd -m -u 10001 appuser USER appuser WORKDIR /app CMD ["sh", "-c", "echo ejecutando como usuario no root"]

¿Cómo excluir archivos innecesarios con .dockerignore?

Complementa el tamaño reducido evitando enviar archivos irrelevantes al build context. Así disminuyes tiempo de compilación y el riesgo de filtrar datos.

Ejemplo de .dockerignore.

.git node_modules *.log .DS_Store

¿Tienes otras prácticas que te funcionen mejor en tu equipo o dudas sobre su aplicación en tu entorno? Comparte tu experiencia y preguntas en los comentarios.