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
--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
oalpine
).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… 🐇
Subscribe to my newsletter
Read articles from Dan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
