Lo que necesita saber sobre Docker en Windows

Pasé el final de la semana pasada en Monki Gras, una conferencia de desarrolladores de Londres centrada en el oficio del desarrollo de software. Es un evento fascinante y este año se centró en cómo empaquetar software.

No es sorprendente que muchos de los oradores hablaran sobre el papel de los contenedores en DevOps y la entrega continua. Pero existía un concepto erróneo generalizado del soporte de Windows para contenedores, generalmente caracterizado como soporte para Docker que se ejecuta en máquinas virtuales Linux.

Eso no es cierto: Windows tiene sus propias tecnologías de contenedores, basadas en Docker pero dándole un giro exclusivo de Microsoft. Esa es probablemente la fuente de la confusión, con Windows 10 agregando soporte para un subsistema de Linux y Microsoft agregando herramientas Docker a Windows Server 2016 casi al mismo tiempo. Ambos son parte del enfoque de Microsoft para el desarrollo de aplicaciones nativas de la nube, que es un elemento clave de su plataforma Azure en el futuro.

El compromiso de Microsoft con los contenedores, uno de los desarrollos intersectoriales más importantes de los últimos años, no debería sorprendernos. Quizás se considere mejor como una forma de encapsular todo un territorio de procesos y espacios de nombres de usuarios para aislarlo de otras instancias que se ejecutan en el mismo servidor, los contenedores se han convertido rápidamente en un componente clave de devops y las implementaciones de integración continua. Microsoft ha adoptado rápidamente estos enfoques internamente y, como siempre, sus herramientas reflejan cómo Redmond usa el software y cómo crea aplicaciones.

Entendiendo los contenedores

Al separar los servicios que utiliza una aplicación de los servicios que necesita un sistema operativo, los contenedores modernos se han convertido en una herramienta poderosa para empaquetar e implementar aplicaciones en servidores. Los contenedores ofrecen portabilidad entre el desarrollo, los centros de datos locales y las nubes privadas, híbridas y públicas. Las aplicaciones envueltas en un contenedor son independientes del sistema operativo host y pueden ejecutarse en cualquier host contenedor similar sin cambios.

Envolver una aplicación en un contenedor significa que la aplicación es fácil de implementar junto con todos los archivos de configuración y dependencias apropiados: si un contenedor se ejecuta en una máquina de desarrollo o pasa todas las pruebas de integración, se ejecutará en un servidor sin ningún cambio. Puede cambiar un contenedor por una nueva versión sin afectar el sistema operativo subyacente, y puede mover un contenedor de un servidor a otro sin afectar su código. Es el punto final lógico de un modelo devops, lo que le permite implementar la infraestructura y las aplicaciones por separado y administrarlas por separado.

Originalmente, una tecnología de mainframe, los contenedores (o al menos formas similares de espacio de nombres y aislamiento de procesos) se podían encontrar en muchos sistemas operativos Unix, incluidos Linux y Solaris.

Dentro de los contenedores de Windows

Ahora, con el lanzamiento de Windows Server 2016, Windows tiene su propia tecnología de contenedores. Se basa en el popular servicio de contenedor Docker de código abierto, pero agrega soporte para usar la línea de comandos de PowerShell y para un aislamiento adicional con la combinación del Nano Server enfocado en contenedores delgados y los contenedores Hyper-V.

Docker permanece en el corazón de la estrategia de contenedores de Microsoft. Sus herramientas, como Swarm y Machine, se utilizan ampliamente, y su producto de centro de datos puede administrar contenedores de Windows y Linux. Incluso puede usar el cliente de Docker desde el shell Bash que es parte de Windows 10, instalándolo en el subsistema de Windows para Linux. Ese enfoque requiere que haga malabarismos con los certificados, por lo que es posible que prefiera usar la aplicación de Windows de Docker como una herramienta de desarrollo y administración básica para sus contenedores de Windows y Linux.

Los contenedores de Windows son, como muchas características de Windows Server, una función que se puede instalar a través del cuadro de diálogo de características de Windows familiar o mediante PowerShell. Tomar la ruta de PowerShell tiene más sentido porque hay un módulo OneGet PowerShell que instala tanto la función de contenedores de Windows como Docker, con solo un reinicio necesario para comenzar. (También deberá habilitar la virtualización de Hyper-V si desea utilizar contenedores de Hyper-V).

Existe una sorprendente cantidad de entusiasmo por los contenedores de Windows tanto por parte de los desarrolladores como de los equipos de operaciones; Microsoft ha informado de más de 1 millón de descargas de las imágenes base de Windows desde la biblioteca de contenedores de Docker's Hub desde que Windows Server 2016 entró en disponibilidad general.

Construyendo e implementando contenedores en Windows

Los contenedores no son solo una herramienta de servidor; las versiones Professional y Enterprise de Windows 10 Anniversary Edition también admiten contenedores. Deberá habilitarlos desde el cuadro de diálogo Características de Windows, pero una vez que estén habilitados, puede instalar y administrar los contenedores de Windows en una PC de desarrollo mediante PowerShell. Debido a que Windows 10 solo admite contenedores Hyper-V, también deberá instalar Hyper-V.

Una vez que se hayan habilitado los contenedores de Windows, deberá descargar e instalar el motor de Docker y el cliente de Docker, e instalar las imágenes base que deberá configurar para su aplicación.

La imagen base sugerida por Microsoft para los contenedores de Windows de nueva construcción es Nano Server, su implementación de servidor centrada en la nube de poco espacio. Nano Server tiene mucho sentido como base de contenedores: es pequeño y rápido, sin interfaz de usuario, por lo que es rápido de implementar y relativamente seguro.

Una nota importante: aunque puede usarlo para alojar tiempos de ejecución como Node.js, Nano Server está diseñado para alojar aplicaciones .Net Core, incluido ASP.Net Core, por lo que no obtendrá todas las funciones .Net a las que está acostumbrado. . Hay suficiente diferencia con el conocido Windows Server que quizás sea mejor pensar en los contenedores de Windows alojados en Nano Server como una herramienta para nuevas aplicaciones en lugar de un host para el código existente.

Esas diferencias explican por qué muchas empresas utilizan Windows Server Core como imagen base. Aunque es más grande y tarda más en implementarse que Nano Server, Windows Server Core ofrece compatibilidad con los SDK de Windows actuales y una implementación completa de .Net. Es mucho más fácil mover rápidamente el código existente a Server Core, lo que le brinda la opción, como lo llama el administrador principal de programas para Windows Server y Hyper-V Containers Taylor Brown, "levantar y cambiar" de los servidores existentes a los contenedores, por lo que ' Puede desplegarse donde quiera. Una vez que la aplicación está en un contenedor, los desarrolladores pueden descomponerla aún más; por ejemplo, mover los conectores de API a sus propios contenedores basados ​​en Nano Server para simplificar el mantenimiento de las aplicaciones.

El soporte de contenedores se está integrando en las herramientas de Windows en el nivel más bajo, y los contenedores de Windows ahora son un objetivo de implementación para Visual Studio 2017. Puede crear y entregar aplicaciones como un contenedor, listas para probar. Hacer contenedores con un simple clic del mouse es un paso importante.

Con Windows Azure que pronto admitirá la virtualización anidada, la capacidad de agregar más aislamiento en la nube pública ayudará a las industrias reguladas a justificar un cambio tanto a los contenedores como a la nube.