Cuando Microsoft y Docker anunciaron por primera vez que la próxima versión de Windows Server admitiría la tecnología de contenedorización cada vez más popular, no había muchos detalles técnicos sobre lo que se necesitaría para hacer que eso funcionara, con preguntas planteadas acerca de cómo Docker realmente podría ser..

"El motor Docker para Windows Server tendrá una paridad de funciones efectiva con el lado de Linux", nos dijo el vicepresidente de Docker, David Messsina. "No habrá diferencia en el uso de un contenedor, que no sea el sistema operativo dentro del contenedor. Las API y todo lo demás en lo que los desarrolladores de aplicaciones deben confiar será el mismo".

Pero en Linux, el motor de Docker (que ejecuta los contenedores y está separado del cliente de Docker que usa para administrarlos) usa características del kernel como espacios de nombres y grupos de C. ¿Tendrá Windows Server eso, junto con un registro, servicio de alojamiento y listas de control de acceso para cada contenedor??

"Haremos todo eso", confirmó Mark Russinovich, CTO de Azure a TechRadar Pro en TechEd Europa, "no tendríamos mucho sentido si no lo hiciéramos". La pregunta más interesante es cómo encaja esto con el modelo de aplicación de Windows Server y cómo puede aprovechar algunos tipos de virtualización que Microsoft ya ha incorporado a su sistema operativo para la compatibilidad con versiones anteriores..

Enfoque diferente

Los contenedores Docker adoptan un enfoque muy diferente al poner un sistema operativo completo y una o más aplicaciones en una máquina virtual, y ejecutarlo como un sistema único que puede o no comunicarse con otras máquinas virtuales a través de una red virtual.

Docker se trata de crear una carga de trabajo a partir de microservicios, con un servicio por contenedor. "Esos contenedores se pueden distribuir", explicó Messina, "puede haber múltiples copias de cada uno de esos servicios distribuidos en todo el entorno". Docker trata de dividir las cosas en contenedores y luego conectarlas como bloques Lego para hacer el sistema que necesita..

Pero, ¿cómo encaja eso con Windows Server? "Una de las preguntas clave es hasta qué punto podemos llevar la compatibilidad de las aplicaciones con esto", señaló Russinovich. "Cuando observa el ecosistema de aplicaciones de Windows, es muy complejo, y las aplicaciones son muy complejas en cuanto a sus dependencias y los diferentes servicios que el servidor pone a su disposición. Estamos descubriendo qué servicios pueden virtualizarse y cuáles deben ser virtualizado para que podamos presentar esa vista por contenedor de servicios. Las aplicaciones más fáciles de manejar están completamente aisladas, por lo que no están aprovechando los servicios de Windows Service Control Manager ".

Cada uno por su cuenta

Cada contenedor también necesitará su propio Registro, por lo que las aplicaciones pueden escribir en él, pero eso es algo que ha estado en Windows durante varios años, como parte del movimiento para evitar que los usuarios tengan que iniciar sesión como administradores para instalar aplicaciones de escritorio..

"Lo que estamos haciendo allí es más sofisticado, pero estamos aprovechando la virtualización del sistema de archivos y la virtualización del registro que hemos hecho, así como la virtualización de la red". Obtener la forma en que los servicios se virtualizan correctamente es la clave para llevar a Docker a Windows, explicó Russinovich, y los espacios de nombres son parte de hacer que eso funcione..

"Hay algunas cosas que son únicas cuando se trata de estos contenedores. La virtualización que normalmente se ve en Windows es de un solo nivel, pero el modelo de Docker es la virtualización apilada". Eso significa que una imagen de Docker puede ser solo una referencia a otra imagen, más un código extra.

"Empiezas con una imagen base que es un sistema de archivos virtual, luego superpones otra imagen con su propio sistema de archivos virtual y que se compone en la parte superior [de la primera imagen]. Puedes componer varias de estas diferentes capas juntas, eso es el valor del formato de embalaje Docker.