Contenedores: concepto y virtualización a nivel de sistema operativo
Un contenedor es una unidad estándar de software que empaqueta el código de una aplicación junto con todas sus dependencias (bibliotecas, binarios, ficheros de configuración y entorno de ejecución) de forma que la aplicación se ejecute de manera rápida y fiable en cualquier entorno. Los contenedores son la expresión práctica de la llamada virtualización a nivel de sistema operativo (OS-level virtualization): en lugar de virtualizar el hardware completo, se aíslan procesos que comparten el mismo núcleo (kernel) del sistema operativo anfitrión, empleando mecanismos del propio kernel como namespaces (aislamiento) y cgroups (control de recursos) en Linux.
Esta aproximación contrasta con la virtualización tradicional basada en máquinas virtuales (VM), donde un hipervisor emula hardware y cada VM incluye su propio sistema operativo invitado completo. Al no arrastrar un sistema operativo por cada instancia, el contenedor es mucho más ligero.
Docker
Docker es la plataforma de contenedores más extendida. Es una herramienta de virtualización a nivel de sistema operativo que permite empaquetar y distribuir aplicaciones junto con todas sus dependencias en contenedores. Su objetivo principal es facilitar el despliegue de aplicaciones en contenedores de software, estandarizando el modo en que una aplicación se construye, se distribuye y se ejecuta.
Docker introduce una capa de abstracción entre la aplicación y la infraestructura subyacente. El propósito de esa abstracción es aumentar la portabilidad de las aplicaciones: una imagen de contenedor se ejecuta igual en el portátil del desarrollador, en un servidor de pruebas o en la nube, sin las diferencias de entorno que producen el clásico problema de "en mi máquina funciona".
Ventajas frente a la virtualización tradicional
La principal ventaja de Docker frente a la virtualización tradicional es la eficiencia en el uso de los recursos del sistema. Como los contenedores comparten el kernel del anfitrión y no replican un sistema operativo completo por instancia:
-
Consumen menos memoria y CPU que las máquinas virtuales equivalentes.
-
Arrancan en segundos (o milisegundos), frente a los minutos de una VM.
-
Ocupan menos espacio en disco, al reutilizar capas de imagen comunes.
-
Permiten una densidad mucho mayor (más aplicaciones por servidor físico).
| Característica | Contenedores (Docker) | Máquinas virtuales |
|---|---|---|
| Nivel de virtualización | Sistema operativo (kernel compartido) | Hardware (hipervisor) |
| Sistema operativo invitado | No lo incluye (usa el del host) | Uno completo por VM |
| Consumo de recursos | Bajo (eficiente) | Alto |
| Tiempo de arranque | Segundos/milisegundos | Minutos |
| Portabilidad | Muy alta | Menor |
Ecosistema de contenerización
Docker no es la única tecnología de contenedores. Entre las tecnologías relacionadas con la contenerización y la gestión de contenedores destacan Docker, containerd y Podman:
-
Docker: plataforma completa (CLI, motor y formato de imagen) que popularizó los contenedores.
-
containerd: runtime de contenedores de bajo nivel, proyecto de la CNCF, encargado de gestionar el ciclo de vida completo del contenedor (imágenes, ejecución, almacenamiento, red). Es el motor que utiliza internamente Docker y también Kubernetes.
-
Podman: motor de contenedores sin demonio (daemonless) y con soporte rootless, compatible con la Open Container Initiative (OCI) y con una interfaz de comandos muy similar a la de Docker.
Todos estos motores se apoyan en los estándares de la OCI (Open Container Initiative), que definen las especificaciones de imagen, de ejecución (runtime) y de distribución, garantizando la interoperabilidad y la portabilidad de las imágenes entre distintas herramientas.
El comando docker run
El comando docker run es la instrucción fundamental de Docker: crea e inicia un nuevo contenedor, descargando la imagen si es necesario, y ejecuta en el contenedor un comando especificado. Formalmente, docker run crea una capa de contenedor escribible sobre la imagen indicada y a continuación la arranca; equivale a encadenar las operaciones de creación (docker create) y de arranque (docker start) del contenedor.
Su sintaxis básica es:
Si la imagen indicada no está disponible localmente, Docker la descarga automáticamente desde el registro (por defecto Docker Hub) antes de crear el contenedor. Es el comando con más opciones de todo Docker, permitiendo configurar red, volúmenes de almacenamiento, variables de entorno, límites de recursos y parámetros de seguridad.
Contenedores en el sistema: Vanilla OS y Apx
La filosofía de contenedores también se aplica al propio sistema operativo. Vanilla OS es una distribución Linux inmutable que gestiona la implementación (instalación) de software mediante contenedores controlados por Apx para reducir conflictos y peligros para el sistema.
Apx es el gestor de paquetes por defecto de Vanilla OS: actúa como envoltorio (wrapper) sobre varios gestores de paquetes e instala el software dentro de uno o más contenedores gestionados, sin alterar el sistema de ficheros raíz. De este modo, el sistema base permanece limpio e inmutable y se minimiza el riesgo de rotura por paquetes incompatibles, mal construidos o en conflicto, a la vez que las aplicaciones contenerizadas siguen pudiendo usar los mismos controladores, servidor gráfico y recursos del sistema. Apx utiliza motores de contenedores como Podman (recomendado) o Docker por debajo.
Fuentes
-
Docker Docs — docker container run (CLI reference): https://docs.docker.com/reference/cli/docker/container/run/
-
Docker Docs — Running containers: https://docs.docker.com/engine/containers/run/
-
Podman — What is Podman? (documentación oficial): https://docs.podman.io/
-
containers/Podman — repositorio oficial (OCI, daemonless): https://github.com/containers/podman
-
Vanilla OS Documentation — Apx (introducción y funcionamiento): https://docs.vanillaos.org/docs/en/apx
-
Vanilla-OS/apx — repositorio oficial: https://github.com/Vanilla-OS/apx
-
Open Container Initiative (OCI) — especificaciones de imagen, runtime y distribución: https://opencontainers.org/