Windows y contenedores

Los contenedores son una tecnología para empaquetar y ejecutar aplicaciones de Windows y Linux en diversos entornos locales y en la nube. Los contenedores proporcionan un entorno ligero y aislado que facilita el desarrollo, implementación y administración de las aplicaciones. Los contenedores se inician y detienen rápidamente, por lo que son ideales para las aplicaciones que necesitan adaptarse rápidamente a la demanda cambiante. La naturaleza ligera de los contenedores también los convierte en una herramienta útil para aumentar la densidad y el uso de la infraestructura.

Gráfico en el que se muestra cómo se pueden ejecutar los contenedores en la nube o de forma local para admitir aplicaciones monolíticas o microservicios escritos en casi cualquier lenguaje.

Para ver una hoja de ruta de las características planeadas y disponibles actualmente, consulte la hoja de ruta de los contenedores de Windows Server. Igualmente, consulte los Eventos para ver presentaciones de vídeo y entradas de blog recientes de los contenedores de Windows.

El ecosistema de contenedores de Microsoft

Microsoft ofrece una serie de herramientas y plataformas que le ayudarán a desarrollar e implementar aplicaciones en contenedores:

  • Ejecute contenedores basados en Windows o Linux en Windows 10 para procesos de desarrollo y pruebas con Docker Desktop, que usa la funcionalidad de contenedores integrada en Windows. También puede ejecutar contenedores de forma nativa en Windows Server.

  • Desarrolle, pruebe, publique e implemente contenedores basados en Windows gracias a la eficaz compatibilidad con contenedores en Visual Studio y Visual Studio Code, que incluyen compatibilidad con Docker, Docker Compose, Kubernetes, Helm y otras tecnologías útiles.

  • Publique sus aplicaciones como imágenes de contenedor en DockerHub público para que las usen otros usuarios, o en una instancia privada de Azure Container Registry para los procesos de desarrollo e implementación de su organización. De este modo, podrá enviar ("push") e incorporar ("pull") cambios directamente desde Visual Studio y Visual Studio Code.

  • Implemente contenedores a escala en Azure u otras nubes:

    • Extraiga la aplicación (imagen de contenedor) de un registro de contenedor (como Azure Container Registry) y después impleméntela y adminístrela a escala mediante un orquestador como Azure Kubernetes Service (AKS) o Azure Service Fabric.
    • Azure Kubernetes Service implementa contenedores en máquinas virtuales de Azure y los administra a escala, independientemente de si son docenas de contenedores, cientos o incluso miles. Las máquinas virtuales de Azure ejecutan una imagen de Windows Server personalizada (si va a implementar una aplicación basada en Windows) o una imagen de Ubuntu Linux personalizada (si va a implementar una aplicación basada en Linux).
  • Implemente contenedores locales mediante Azure Stack con el motor de AKS (en versión preliminar con contenedores de Linux) o Azure Stack con OpenShift. También puede configurar Kubernetes en Windows Server (consulte Kubernetes en Windows) y estamos trabajando en admitir la ejecución de contenedores de Windows en RedHat OpenShift Container Platform.

Cómo funcionan los contenedores

Un contenedor es un paquete aislado y ligero para ejecutar una aplicación en el sistema operativo host. Los contenedores se basan en el kernel del sistema operativo host (que puede considerarse la fontanería del sistema operativo), tal como se muestra en este diagrama.

Diagrama arquitectónico en el que se muestra cómo se ejecutan los contenedores en un nivel superior del kernel

Aunque un contenedor comparte el kernel del sistema operativo host, no obtiene acceso sin restricciones a dicho kernel. En su lugar, el contenedor obtiene una vista aislada (y, en ocasiones, virtualizada) del sistema. Por ejemplo, un contenedor puede tener acceso a una versión virtualizada del sistema de archivos y el registro, pero los cambios solo afectan al contenedor y se descartan cuando se detiene. Para guardar los datos, el contenedor puede montar una instancia de almacenamiento persistente, como Azure Disk o un recurso compartido de archivos (incluido Azure Files).

Un contenedor se basa en el kernel, pero el kernel no proporciona todas las API y servicios que una aplicación necesita para ejecutarse; la mayoría de estos últimos se proporcionan a través de archivos del sistema (bibliotecas) que se ejecutan sobre el kernel en modo de usuario. Dado que un contenedor está aislado del entorno de modo de usuario del host, el contenedor necesita su propia copia de estos archivos del sistema de modo de usuario, que se empaquetan en algo conocido como imagen base. La imagen base cumple el papel de la capa fundamental en la que se basa el contenedor y le proporciona los servicios de sistema operativo que no ofrece el kernel. Sin embargo, mencionaremos más detalles acerca de las imágenes de contenedor más adelante.

Contenedores frente a máquinas virtuales

A diferencia de un contenedor, una máquina virtual (VM) ejecuta un sistema operativo completo, incluido su propio kernel, tal como se muestra en este diagrama.

Diagrama arquitectónico en el que se muestra cómo las máquinas virtuales ejecutan un sistema operativo completo junto al sistema operativo host

Los contenedores y las máquinas virtuales tienen sus usos particulares; de hecho, muchas implementaciones de contenedores usan máquinas virtuales como sistema operativo host en lugar de ejecutarse directamente en el hardware, sobre todo cuando se ejecutan contenedores en la nube.

Para obtener más información sobre las similitudes y las diferencias de estas tecnologías complementarias, consulte Contenedores frente a máquinas virtuales.

Imágenes del contenedor

Todos los contenedores se crean a partir de imágenes de contenedor. Una imagen de contenedor es un conjunto de archivos organizados en una pila de capas que se hospeda en el equipo local o en un registro de contenedor remoto. La imagen de contenedor está compuesta por los archivos de sistema operativo del modo de usuario que son necesarios para admitir la aplicación, los entornos de ejecución o las dependencias de la aplicación, y cualquier otro archivo de configuración que la aplicación necesite para ejecutarse correctamente.

Microsoft ofrece varias imágenes (denominadas imágenes base) que puede usar como punto de partida para crear su propia imagen de contenedor:

  • Windows: contiene el conjunto completo de API y servicios del sistema de Windows (menos los roles de servidor).
  • Windows Server: contiene el conjunto completo de API y servicios del sistema de Windows.
  • Windows Server Core: una imagen más pequeña que contiene un subconjunto de las API de Windows Server; es decir, la versión completa de .NET Framework. También incluye la mayoría de los roles de servidor, aunque lamentablemente, no el servidor de fax.
  • Nano Server: la imagen de Windows Server más pequeña, compatible con las API de .NET Core y algunas funciones de servidor.

Como se mencionó anteriormente, las imágenes de contenedor se componen de una serie de capas. Cada capa contiene un conjunto de archivos que, cuando se superponen, representan la imagen de contenedor. Debido a la naturaleza por capas de los contenedores, no es necesario que siempre tenga como destino una imagen base para compilar un contenedor de Windows. En su lugar, puede elegir como destino otra imagen que ya contenga el marco de trabajo que quiere. Por ejemplo, el equipo de .NET publica una imagen de .NET Core que incluye el entorno de ejecución de .NET Core. Esto evita que los usuarios tengan que realizar nuevamente el proceso de instalación de .NET Core. En su lugar, pueden volver a usar las capas de esta imagen de contenedor. La imagen de .NET Core está basada en Nano Server.

Para obtener más información, consulte Imágenes base del contenedor.

Usuarios de los contenedores

Contenedores para desarrolladores

Los contenedores ayudan a los desarrolladores a crear y distribuir aplicaciones de mayor calidad, más rápido. Con los contenedores, los desarrolladores pueden crear una imagen de contenedor que se implementa en segundos de forma idéntica en todos los entornos. Los contenedores actúan como un mecanismo sencillo para compartir código entre equipos y arrancar un entorno de desarrollo sin afectar al sistema de archivos del host.

Los contenedores son portátiles y versátiles, pueden ejecutar aplicaciones escritas en cualquier lenguaje y son compatibles con cualquier equipo que ejecute Windows 10, versión 1607 o posterior, o Windows Server 2016 o posterior. Los desarrolladores pueden crear y probar contenedores localmente en su equipo portátil o de escritorio y luego implementar esa misma imagen de contenedor en la nube privada, la nube pública o el proveedor de servicios de su empresa. La agilidad natural de los contenedores admite patrones de desarrollo de aplicaciones modernas en entornos de nube virtualizados y a gran escala. La ventaja más útil para los desarrolladores es quizás la capacidad de aislar el entorno para que la aplicación siempre reciba la versión de las bibliotecas que se especifique, a fin de evitar conflictos con las dependencias.

Contenedores para los profesionales de TI

Los contenedores ayudan a los administradores a crear una infraestructura que sea más fácil de actualizar y mantener, y que el uso de los recursos de hardware sea más completo. Los profesionales de TI pueden utilizar los contenedores para ofrecer entornos estandarizados para su desarrollo, sus controles de calidad y sus equipos de producción. Mediante el uso de contenedores, los administradores de sistemas abstraen las diferencias en las instalaciones de sistemas operativos y la infraestructura subyacente.

También puede usar el modo interactivo de contenedores para ejecutar en el mismo sistema las instancias en conflicto de una herramienta de línea de comandos.

Orquestación de contenedores

Los orquestadores son una parte fundamental de la infraestructura al configurar un entorno basado en contenedores. Aunque puede administrar algunos contenedores manualmente mediante Docker y Windows, las aplicaciones suelen usar cinco, diez o incluso cientos de contenedores, donde se encuentran los orquestadores.

Los orquestadores de contenedor se crearon para ayudar a administrar contenedores a escala y en producción. Los orquestadores proporcionan las funcionalidades para:

Los orquestadores le ayudan a aumentar el tamaño de las aplicaciones en contenedores a escala, lo que proporciona funcionalidades para:

  • Implementación a escala
  • Programación de cargas de trabajo
  • Supervisión de estado
  • Conmutación por error cuando se produce un error en un nodo
  • Escalado o reducción vertical
  • Funciones de red
  • Detección de servicios
  • Coordinación de las actualizaciones de aplicaciones
  • Afinidad de nodos de clúster

Hay muchos orquestadores diferentes que puede utilizar con los contenedores de Windows. Estas son las opciones que proporciona Microsoft:

Prueba de contenedores en Windows

Para empezar a trabajar con contenedores en Windows Server o Windows 10, consulte lo siguiente:

Para obtener ayuda a la hora de decidir qué servicios de Azure son adecuados para su escenario, consulte Azure Container Services y Selección de los servicios de Azure que se usarán para hospedar la aplicación.

Recursos

Para ver los recursos a fin de usar Windows Server: