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

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ística | Docker | Podman |
| Daemon | Requiere dockerd | Sin daemon (rootless) |
| Seguridad | Corre como root por defecto | Rootless por diseño |
| Compatibilidad | Amplia comunidad y soporte | Compatible con CLI de Docker |
| Soporte empresarial | Alto (Docker Desktop, EKS) | Adoptado por Red Hat y Fedora |
| Usos típicos | Dev, CI/CD, orquestación | Servidores, 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
--rmelimina 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
distrolessoalpine).No uses
:latest. Usa versiones fijas.Añade
HEALTHCHECKpara 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
bashy 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… 🐇



