Cómo funcionan los contenedores Docker - Diferencias con las máquinas virtuales

12 min de lectura | 2025.12.10

¿Qué es un Contenedor?

Un contenedor es un entorno de ejecución ligero que empaqueta una aplicación y todas sus dependencias necesarias para ejecutarse. Comparte el kernel del sistema operativo host mientras ejecuta procesos de forma aislada.

Beneficios de los contenedores: Ligeros, arranque rápido, consistencia del entorno, eficiencia de recursos

Diferencias con las Máquinas Virtuales

Máquinas Virtuales (VM)

  • Virtualizan completamente el sistema operativo guest sobre un hipervisor
  • Cada VM tiene su propio kernel
  • Toma varios minutos iniciar
  • Consume recursos en el orden de GB

Contenedores

  • Comparten el kernel del sistema operativo host
  • Aislamiento a nivel de proceso
  • Inician en segundos
  • Consumen recursos en el orden de MB

Tecnologías del Kernel Linux

Los contenedores Docker utilizan dos características principales del kernel Linux:

1. Namespaces (Espacios de nombres)

Funcionalidad que aísla el alcance visible para los procesos:

  • Namespace PID: Aísla los IDs de proceso
  • Namespace Network: Aísla la pila de red
  • Namespace Mount: Aísla el sistema de archivos
  • Namespace UTS: Aísla el nombre de host
  • Namespace User: Aísla los IDs de usuario

2. cgroups (Control Groups)

Funcionalidad que limita los recursos que los procesos pueden usar:

  • Limitación del uso de CPU
  • Limitación del uso de memoria
  • Limitación de I/O de disco
  • Limitación de ancho de banda de red
# Ejemplo de limitación de recursos de contenedor
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  nginx

Estructura de una Imagen Docker

Las imágenes Docker están compuestas por capas de solo lectura:

  1. Imagen base: Sistema operativo (ubuntu, alpine, etc.)
  2. Dependencias: Librerías y runtime
  3. Aplicación: Código a ejecutar

Beneficios de las capas: Las capas comunes se comparten entre múltiples imágenes, mejorando la eficiencia del almacenamiento.

Resumen

Los contenedores Docker aprovechan namespaces y cgroups de Linux para proporcionar entornos de aislamiento ligeros y rápidos. Comparados con las máquinas virtuales, tienen significativamente menos overhead, siendo ideales para la arquitectura de microservicios moderna.

← Volver a la lista