Bases físicas y lógicas de los contenedores

Clase 3 de 48Curso de Arquitectura de Aplicaciones con Docker 2018

En qué se basan los contenedores

Los contenedores se basan en el aislamiento de recursos: aislamiento de sistema de ficheros, de espacio de procesos, de memoria. Es decir, hacen que los procesos dentro del contenedor no tengan acceso a lo que ocurra fuera del mismo; aunque esto no sucede al revés. El hecho de que el espacio de procesos esté aislado implica que cualquier programa, tenga el privilegio que tenga, dentro del contenedor no podrá ver los programas que se ejecuten fuera; lo mismo ocurre con el sistema de ficheros: el directorio raíz, que en realidad estará físicamente en un directorio en la máquina anfitrión, será para los procesos de dentro el único directorio raíz posible, y así con el resto de los elementos de un sistema operativo: espacio de nombres, por ejemplo, o la memoria.

Bases lógicas

Estos mecanismos de aislamiento son propios del kernel o núcleo del sistema operativo, apoyado en algunos casos por mecanismos de los procesadores. Esta es una de las diferencias principales con los mecanismos de virtualización, que en los casos principales actúan a nivel del procesador. Es el procesador el que aísla la memoria o el sistema de ficheros; en el caso de Docker y otros sistemas de contenedores, es el sistema operativo.

Esto implica varias cosas: primero, los contenedores son específicos del sistema operativo; un contenedor para un sistema operativo (y, por supuesto, procesador), no será ejecutable en otro. En ese sentido, conviene más asimilar un contenedor a un ejecutable (que también son específicos de sistemas operativos) que a una máquina virtual. Segundo, los contenedores no incluyen un kernel, usan el kernel externo. Eso hacen que sean mucho más ligeros y se puedan ejecutar (y destruir) rápidamente.

Estos mecanismos del sistema operativo expuestos a través de un interfaz de aplicación, una serie de bibliotecas que se reúnen en una sola; por eso se puede portar Docker a diferentes sistemas operativos, al crear versiones diferentes de esta biblioteca. Los programas de línea de órdenes (u otros) pueden simplemente recompilarse, aunque una vez más los mecanismos de bajo nivel impedirán que se ejecuten programas de una arquitectura en otra. Es decir, los sistemas de gestión de contenedores abstraen estos mecanismos de los núcleos de los diferentes sistemas operativos para ofrecer un interfaz uniforme.

En general, los servicios en la nube ofrecen alojamiento para contenedores basados en Linux; algunos, como Azure, pueden ofrecer también soporte para Windows. Por eso y por el momento, Linux es el sistema operativo aconsejable para crear y trabajar con contenedores.

Los contenedores no son máquinas virtuales

Aunque se suelen usar el término virtualización ligera para referirnos a ellos, un contenedor no virtualiza un procesador, aísla el contenido del exterior y de otros procesadores.

Como no son máquinas virtuales, en general los contenedores sólo se pueden ejecutar en un sistema operativo, aquél para el que se han creado.O sea:

Contenedores de Linux en Linux (en cualquiera), contenedores de Windows en Windows. Entre Linux y Windows existe cierto tipo de interoperabilidad, al implementar las últimas versiones de Windows, en algunos casos, un subsistema Ubuntu para llevar a cabo este tipo de cosas. Al revés, sin embargo, no es cierto.

Este panorama general cambia en algunos casos: en realidad los contenedores usan máquinas virtuales, así que en Mac se pueden ejecutar los de Linux y Windows. Sin embargo, esto es un tema probablemente temporal y en el futuro es posible que se implementen para el kernel del MacOS los mecanismos para que haya una virtualización real.