¿Qué es un container?

Una introducción a los contenedores, el aislamiento de procesos y el papel del kernel de Linux.

Logotipo de Docker

Un contenedor es una forma de virtualización a nivel de sistema operativo que aísla uno o varios procesos y les proporciona un contexto de ejecución propio.

El proceso y su contexto

El kernel media entre los programas y los recursos de una máquina: procesos, red, sockets, sistemas de archivos y dispositivos. También aplica permisos y coordina el acceso a recursos compartidos.

Ese conjunto de recursos visibles para un proceso constituye su contexto de ejecución. En un sistema tradicional, los procesos comparten la vista de la máquina. Los mecanismos de aislamiento de Linux permiten ofrecer a grupos de procesos una vista distinta de determinados recursos.

Esquema de contenedores y máquinas virtuales

Contenedores y máquinas virtuales

Una máquina virtual emula hardware y ejecuta su propio kernel. Un contenedor comparte el kernel del anfitrión, pero limita y separa aspectos del contexto de sus procesos. Por eso suele arrancar con rapidez y requiere menos recursos que una máquina virtual.

La diferencia también define el límite de aislamiento: al compartir kernel, los contenedores no equivalen a máquinas virtuales y deben protegerse como procesos que dependen del mismo sistema operativo.

El papel de Linux

Linux construye estas vistas aisladas mediante namespaces y otros mecanismos del kernel. Namespaces separan recursos como los identificadores de proceso, la red, los puntos de montaje y el hostname; los grupos de control permiten organizar y limitar el consumo de recursos.

La combinación de estas capacidades hace posible empaquetar aplicaciones y sus dependencias en unidades reproducibles, sin virtualizar una máquina completa.

Para seguir aprendiendo

Los namespaces de PID y UTS ilustran cómo el kernel presenta contextos diferentes a procesos distintos. En la primera parte de nuestra serie sobre namespaces vemos el aislamiento de procesos; la segunda parte explora el hostname.