Guía Completa de Docker
De contenedores a microservicios
Docker ha revolucionado la informática al permitir que las aplicaciones se ejecuten de manera idéntica en cualquier entorno.
Desde una laptop local hasta un clúster en la nube: esta guía técnica proporciona los conocimientos necesarios para construir, desplegar y gestionar contenedores de manera eficiente y segura, optimizando el uso de recursos de servidor.
¿Qué es un contenedor y por qué importa?
A diferencia de las máquinas virtuales, los contenedores comparten el kernel del sistema operativo host. Esto los hace extremadamente ligeros y rápidos de iniciar: un contenedor puede arrancar en milisegundos porque no necesita cargar un sistema operativo completo, solo el proceso de la aplicación y sus dependencias directas.
Esta tecnología de aislamiento permite empaquetar una aplicación con todas sus bibliotecas y configuraciones. El resultado directo es que el software se comporta exactamente igual en desarrollo, pruebas y producción, eliminando la frase clásica: "en mi máquina funciona".
Comparte el kernel del host. Arranca en milisegundos. Consume megabytes de RAM. Aislamiento a nivel de proceso.
Incluye un kernel completo. Arranca en segundos o minutos. Consume gigabytes de RAM. Aislamiento a nivel de hardware.
La arquitectura cliente-servidor de Docker
Docker Daemon
El proceso dockerd que gestiona imágenes, contenedores, redes y volúmenes en el host. Escucha peticiones de la API REST.
Cliente Docker
La interfaz docker que usas en la terminal. Envía comandos al daemon mediante sockets UNIX o TCP.
Registry
Almacén de imágenes como Docker Hub. El daemon descarga y sube imágenes desde aquí mediante pull y push.
Las imágenes se construyen mediante capas apiladas. Cada instrucción del Dockerfile genera una capa de solo lectura. Esto permite un almacenamiento eficiente y descargas rápidas: si dos imágenes comparten una base común, esa capa se descarga una sola vez y se reutiliza localmente.
Comprender esta arquitectura es vital para diagnosticar problemas de conexión y permisos. Si el cliente no se comunica con el daemon, los errores suelen estar en los permisos del socket UNIX o en la configuración del contexto Docker.
Escribiendo un Dockerfile eficiente
El Dockerfile es el manifiesto que define cómo se construye tu imagen. Un Dockerfile bien optimizado reduce los tiempos de despliegue y minimiza la superficie de ataque para posibles vulnerabilidades.
Usa builds multietapa para copiar solo los artefactos necesarios al imagen final.
Elige imágenes base ligeras como Alpine Linux para reducir el tamaño descargable.
Agrupa comandos RUN para reducir capas y acelerar la caché de construcción.
Coloca las instrucciones que cambian con menos frecuencia al inicio del archivo.
La primera etapa compila dependencias. La segunda copia solo el resultado, dejando fuera compiladores y archivos temporales. El resultado: imágenes más pequeñas y menos herramientas disponibles para un atacante.
Gestión de datos con volúmenes
Los contenedores son efímeros por naturaleza. Si el contenedor se detiene, los datos se pierden a menos que se gestionen correctamente.
Volúmenes Docker
Almacenados en el sistema de archivos gestionado por Docker (/var/lib/docker/volumes). Docker los gestiona, respalda y migra entre hosts.
Cuándo usar: bases de datos en producción, datos que deben sobrevivir a la eliminación del contenedor, entornos multi-host.
Bind mounts
Montan una ruta específica del host directamente al contenedor. Útiles para desarrollo en vivo: los cambios en tu editor se reflejan al instante dentro del contenedor.
Cuándo usar: desarrollo local con recarga en caliente, archivos de configuración editables, logs accesibles desde el host.
Saber cuándo usar cada tipo de persistencia asegura la integridad de la información de tu aplicación. Una regla práctica: volúmenes para datos de producción, bind mounts para código en desarrollo.
Redes en Docker
Conectar contenedores entre sí requiere entender los drivers de red de Docker. Crear redes personalizadas permite que los microservicios se comuniquen de forma segura sin exponer puertos innecesarios al mundo exterior. La segmentación de red es un paso fundamental para la seguridad en entornos de contenedores.
Red virtual interna por defecto. Los contenedores se comunican entre sí sin exponer puertos al host.
El contenedor usa directamente la red del host. Sin aislamiento, pero con máximo rendimiento.
Conecta contenedores entre múltiples hosts en un clúster Swarm. Necesario para orquestación distribuida.
Una red personalizada aísla servicios y controla qué contenedores pueden verse entre sí.
Orquestación con Docker Compose
Para aplicaciones que requieren múltiples servicios, Docker Compose es la herramienta estándar. Permite levantar todo el ecosistema con un solo comando.
Tutorial de Docker ComposeCuando una aplicación necesita un frontend, una API y una base de datos, definir cada contenedor manualmente con docker run se vuelve inmanejable. Docker Compose resuelve esto describiendo toda la aplicación multiservicio en un único archivo YAML.
Con docker compose up, los tres servicios se levantan en el orden correcto, con sus redes y volúmenes configurados automáticamente. Es la solución ideal para entornos de desarrollo local y pruebas integradas.
Seguridad en el entorno de contenedores
Ejecutar procesos como root dentro de un contenedor es un riesgo crítico de seguridad. Si un atacante compromete la aplicación, obtiene privilegios de root sobre el contenedor y, potencialmente, vías de escape hacia el host. Estas prácticas reducen drásticamente la superficie de ataque.
Usuario no privilegiado
Crea un usuario dedicado en el Dockerfile y ejecuta el proceso con USER appuser. Nunca arranques el contenedor como root si la aplicación no lo requiere.
Escaneo de CVEs
Escanea las imágenes con herramientas como Trivy o Grype antes de subirlas al registro. Identifica vulnerabilidades conocidas en las bibliotecas empaquetadas y aplica parches de forma periódica.
Límites de recursos
Usa --memory y --cpus para limitar el consumo de RAM y CPU. Un contenedor desbocado no puede consumir todos los recursos del host ni provocar denegación de servicio.
Firmas de imágenes
Firma tus imágenes con Notation o Cosign. Mantener las imágenes actualizadas y firmadas asegura que solo el código confiable llegue a tus servidores, descartando imágenes alteradas en tránsito.
La imagen más segura es la que tiene menos paquetes, menos privilegios y menos superficie expuesta.
Docker en el flujo de CI/CD
El contenedor es el artefacto final de un pipeline moderno. Cada vez que se actualiza el código, el pipeline construye la imagen, ejecuta los tests dentro de un contenedor idéntico al de producción y sube el resultado a un registro privado.
Integrar Docker en tu pipeline de Jenkins o GitHub Actions acelera la transición del código desde el repositorio hasta el usuario final. El mismo binario que pasó los tests es el que se despliega: sin reformateo, sin reinstalación de dependencias, sin sorpresas en producción.
Un flujo típico etiqueta la imagen con el hash del commit de Git, lo que permite trazabilidad completa: sabes exactamente qué código ejecuta cada contenedor en producción y puedes volver a una versión anterior en segundos.
Construcción de imagen
El pipeline ejecuta docker build con el Dockerfile del repositorio.
Tests en contenedor
Se ejecutan tests unitarios e de integración dentro de la imagen recién construida.
Push al registro
La imagen validada se etiqueta y se sube al registro privado con docker push.
Despliegue
El servidor de producción hace docker pull de la nueva etiqueta y reinicia el contenedor.
Fundamentos de DevOps
Si estás empezando, revisa la base conceptual antes de profundizar en contenedores.
Ir a fundamentos →Pipeline CI/CD con Docker
Conecta esta guía con la automatización de despliegues y la integración continua.
Ver pipeline CI/CD →Herramientas y ecosistema
Explora el catálogo de herramientas complementarias a Docker para tu infraestructura.
Explorar herramientas →RealPulse DevOps publica guías técnicas para ingenieros y equipos de operaciones en Argentina. Si tienes preguntas sobre contenedores, CI/CD o migración de infraestructura, escríbenos y te respondemos directamente.