Docker y Podman: Contenedores para SREs y DevOps en la vida real

DanDan
3 min read

Introducción

Contenedores. Los has oído mil veces. Docker revolucionó la forma en que desarrollamos, distribuimos y desplegamos software. Luego vino Podman, ofreciendo un enfoque más seguro y flexible.

En este artículo, vamos a explorar lo que necesitas saber realmente como SRE o DevOps en crecimiento. Desde diferencias clave hasta comandos esenciales y errores comunes. Todo con orientación práctica y sin humo.

Docker vs Podman: ¿Enemigos o evolución?

CaracterísticaDockerPodman
DaemonRequiere dockerdSin daemon (rootless)
SeguridadCorre como root por defectoRootless por diseño
CompatibilidadAmplia comunidad y soporteCompatible con CLI de Docker
Soporte empresarialAlto (Docker Desktop, EKS)Adoptado por Red Hat y Fedora
Usos típicosDev, CI/CD, orquestaciónServidores, automatización segura

Ambas herramientas usan el mismo backend de contenedores (runc) y son altamente compatibles. Podman incluso soporta docker-compose vía podman-compose.

Comandos esenciales para tu día a día

Todos los comandos mostrados a continuación funcionan igual con podman. Solo cambia el prefijo.

Crear y ejecutar contenedores

docker run -it --rm alpine sh

Inicia un contenedor temporal basado en Alpine Linux. El flag --rm elimina el contenedor al salir.

Construir imágenes

docker build -t myapp:dev .

Listar y administrar contenedores

docker ps        # Contenedores en ejecución
docker ps -a     # Todos los contenedores
docker stop web  # Detiene el contenedor 'web'
docker rm web    # Elimina el contenedor 'web'

Manejar imágenes

docker images            # Lista de imágenes locales
docker rmi myapp:dev     # Elimina la imagen

Ejecutar comandos dentro de contenedores

docker exec -it nginx bash

Ver logs de contenedores

docker logs -f nginx

Volúmenes

docker volume create datos
docker run -v datos:/data alpine touch /data/test.txt

Redes

docker network ls              # Lista de redes
docker run --network host ... # Usa la red del host

Exportar e importar imágenes

docker save nginx:alpine > nginx.tar
docker load < nginx.tar

Compartir contenedores como servicios con systemd (solo Podman)

podman generate systemd --name webapp > /etc/systemd/system/webapp.service

Buenas prácticas en producción

  • Usa imágenes pequeñas, firmadas o verificadas (como distroless o alpine).

  • No uses :latest. Usa versiones fijas.

  • Añade HEALTHCHECK para exponer el estado del contenedor.

  • Versiona siempre tu Dockerfile.

  • Usa rootless (Podman) para desarrollo local o entornos CI/CD seguros.

  • Revisa permisos y redes asignadas por defecto.

Antipatrones comunes

  • Usar contenedores como máquinas virtuales (con bash y cambios manuales).

  • Imágenes pesadas y sin .dockerignore.

  • Acumular contenedores muertos, imágenes y volúmenes sin limpieza.

  • Ejecutar contenedores como root sin necesidad.

Más allá del contenedor

Docker y Podman son solo el comienzo. Saber manejar imágenes, contenedores y redes es base para herramientas como:

  • Kubernetes

  • Nomad

  • Buildah / Skopeo

  • containerd / cri-o

  • GitHub Actions, Jenkins, GitLab CI

El dominio de contenedores locales se traduce directamente en mayor comprensión de la infraestructura moderna.

Aprender Docker y Podman es como aprender a conjurar contenedores: encapsular lógica, dependencias y comportamiento en algo pequeño, portable y poderoso.

Con el tiempo, escribirás tus propios manifiestos, automatizarás despliegues y orquestarás infraestructuras con la misma fluidez con la que hoy escribes un docker run.

Esto es solo el principio. The Rabbit Hole continúa… 🐇

0
Subscribe to my newsletter

Read articles from Dan directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Dan
Dan