Contenedores (Docker, Kubernetes, LXC)
Los contenedores son una tecnología de virtualización ligera que permite ejecutar aplicaciones aisladas, pero compartiendo el mismo núcleo del sistema operativo. 👉 A diferencia de las máquinas virtuales (VMs), los contenedores no simulan un sistema completo, lo que los hace más rápidos y eficientes.
1. Características principales #
- Aislamiento de procesos → cada contenedor tiene sus propios procesos, librerías y dependencias.
- Ligereza → consumen menos recursos que las VMs porque comparten el kernel.
- Portabilidad → “se ejecuta igual en cualquier sitio” (local, servidor, nube).
- Escalabilidad → se pueden crear y destruir rápidamente.
- Rapidez → arrancan en segundos (una VM tarda mucho más).
2. Tecnologías de contenedores #
-
LXC (Linux Containers)
- Primera implementación de contenedores en Linux.
- Usa namespaces y cgroups para aislar procesos.
- Más cercano a la virtualización tradicional.
-
Docker
- Popularizó los contenedores a partir de 2013.
- Facilita la creación de imágenes y despliegue de aplicaciones.
- Compatible con Windows y macOS (aunque en realidad usa una capa Linux).
-
Kubernetes (K8s)
- Sistema de orquestación de contenedores.
- Administra cientos o miles de contenedores en clusters.
- Permite balanceo de carga, escalado automático y alta disponibilidad.
- Muy usado en entornos de cloud computing.
3. Ventajas de los contenedores #
- Consumo de recursos mucho menor que las VMs.
- Despliegue rápido y fácil.
- Portabilidad → “empaquetas” la aplicación con todo lo necesario.
- Escalabilidad en sistemas distribuidos.
4. Desventajas #
- Menos aislamiento que una VM (comparten kernel).
- Seguridad: un fallo en el kernel afecta a todos los contenedores.
- Requiere un ecosistema de gestión (ej. Kubernetes) en proyectos grandes.
5. Ejemplo práctico #
-
Un desarrollador quiere probar una aplicación web en varios entornos.
-
Con Docker, puede crear un contenedor con:
- Servidor web (Nginx).
- Base de datos (MySQL).
- Código de la aplicación.
-
Después puede ejecutarlo igual en su PC, en un servidor Linux o en la nube.
6. Diferencia con máquinas virtuales #
| Aspecto | Máquina Virtual | Contenedor |
|---|---|---|
| Kernel | Propio (emulado) | Comparte con el host |
| Peso | Pesada (GBs) | Ligera (MBs) |
| Arranque | Minutos | Segundos |
| Aislamiento | Completo | Parcial |
| Uso típico | Sistemas completos | Aplicaciones y microservicios |
Resumen del tema
Conceptos clave #
- Virtualización a Nivel de Sistema Operativo (Contenedores): empaquetado de aplicaciones con sus dependencias que comparten el kernel del host sin sobrecarga de emulación de hardware.
- Primitivas del Kernel Linux:
- Namespaces: aislamiento de recursos (PID, red, puntos de montaje, IPC, UTS, usuarios).
- Control Groups (cgroups): limitación y medición de recursos de hardware (CPU, memoria, disco, E/S).
- Ecosistema de Contenedores:
- LXC: contenedores de sistema operativo.
- Docker / Podman: empaquetado inmutable basado en imágenes OCI multicapa.
- Kubernetes (K8s): orquestación masiva, auto-escalado, balanceo y autoreparación de microservicios.
Qué debes recordar #
Los contenedores aíslan aplicaciones compartiendo el kernel mediante namespaces y cgroups, ofreciendo mayor ligereza y arranque instantáneo frente a las máquinas virtuales.