Conceptos básicos sobre contenedores

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar

Los contenedores son un mecanismo de aislamiento de procesos (también llamado sandboxing) disponible en sistemas Linux, que permite ejecutar aplicaciones de forma independiente y segura, como si estuvieran en un entorno propio. A diferencia de las máquinas virtuales, los contenedores no requieren emular un sistema operativo completo, lo que los hace más ligeros y eficientes.

En Linux se logra mediante la llamada al sistema unshare que permite aislar al proceso a diferentes niveles:

  • Usuario: se aísla los usuarios del contenedor respecto al sistema anfitrión, se realiza un mapeo de los usuarios a un nuevo espacio de UID diferente. El usuario que ejecuta el contenedor se convierte en administrador (root) dentro de él, y el resto de usuarios reciben diferentes UID a los del sistema.
  • Red: se ocultan las interfaces y configuraciones de red del sistema operativo. Se pueden crear interfaces virtuales (veth) para conectar al contenedor con el exterior o con otros contenedores.
  • Proceso: Desvincula el árbol de procesos del contenedor del sistema anfitrión. El proceso solo ve sus propios procesos, deja de ver su procesos y el resto de procesos del sistema.
  • Sistema de archivos: Redefine los puntos de montaje visibles para el proceso, permitiendo que solo acceda a una parte específica del sistema de archivos (por ejemplo, una carpeta concreta). El resto del sistema de ficheros queda oculto.

A un proceso que combina estos cuatro niveles de aislamiento se le denomina contenedor. Los contenedores ofrecen un sandbox que se trata de un espacio aislado que es conveniente para:

  • Desarrollo y pruebas: Ejecutar aplicaciones en entornos aislados y reproducibles.
  • Despliegue de servicios: Implementar microservicios de forma eficiente y escalable.
  • Seguridad: Ofrecen un capa de aislamiento frente a posibles vulnerabilidades.

Los contenedores se pueden ver como un mecanismo de virtualización ligera, pues ofrecen una escalabilidad varios órdenes de magnitud frente a las máquinas virtuales, no obstante:

  • Solo permite la ejecución de Linux dentro del contenedor, no es posible combinar diferentes sistemas operativos. Sí es posible combinar diferentes distribuciones de Linux.
  • Ofrecen un menor grado de aislamiento que una máquina virtual desde el punto de vista de seguridad y fiabilidad, pues los contenedores hacen uso del mismo núcleo del sistema operativo. No obstante, la extensiones de aceleración de virtualización por hardware y la paravirtualización exponen más aspectos del hardware y sistema operativo antifrión a la máquina virtual.