Definición de contenedores
A medida que Contoso migra y virtualiza varias cargas de trabajo, podría darse la opción de incluir en contenedores algunas de las cargas de trabajo. El administrador de Windows Server evaluará los contenedores y comprenderá cómo funcionan y cuáles son las ventajas de utilizarlos. Entre las ventajas se incluyen la movilidad, la agilidad y la mayor eficiencia y densidad de los servidores. Todas estos beneficios contribuyen a optimizar las cargas de trabajo de los servidores y la coherencia de los entornos de desarrollo.
¿Qué son los contenedores?
Un contenedor se usa para empaquetar una aplicación junto con todas sus dependencias y abstraerla del sistema operativo (SO) host en el que se ejecutará. Los contenedores proporcionan un entorno ligero de desarrollo y ejecución en el que las aplicaciones pueden ejecutarse y compartirse fácilmente durante el desarrollo. No solo es un contenedor aislado del sistema operativo host, sino que también está aislado de otros contenedores. Los contenedores aislados proporcionan un entorno de ejecución virtual, que también puede mejorar la seguridad y la confiabilidad de las aplicaciones que se ejecutan dentro de ellos.
Tradicionalmente, una aplicación de software se desarrolla para ejecutarse en una plataforma de procesador, hardware y sistema operativo compatible. Normalmente, las aplicaciones de software requieren código adicional para proporcionar compatibilidad con las diferentes plataformas del entorno de ejecución. Con tantos sistemas informáticos distintos, se necesita una plataforma de desarrollo y administración de software más eficiente que permita la portabilidad entre múltiples entornos informáticos. Los contenedores ayudan a proporcionar esa portabilidad.
Ventajas del uso de contenedores
Entre las ventajas del uso de contenedores se incluyen las siguientes:
La capacidad de ejecutarse en cualquier sitio. Los contenedores se pueden ejecutar en varias plataformas, como los sistemas operativos Linux, Windows y Mac. Se pueden hospedar en una estación de trabajo local, en servidores en centros de trabajo locales o aprovisionados en la nube.
Aislamiento. Para una aplicación, un contenedor parece ser un sistema operativo completo. Los recursos de CPU, memoria, almacenamiento y red se virtualizan dentro del contenedor y están aislados de la plataforma del host y de otras aplicaciones.
Mayor eficacia. Los contenedores se pueden implementar, actualizar y escalar rápidamente para admitir un ciclo de vida de desarrollo, prueba y producción más ágil. Dado que son más eficientes en cuanto a los recursos que consumen, su superficie es menor, lo que permite una mayor densidad en los servidores.
Un entorno de desarrollo coherente. Los desarrolladores usan contenedores como un entorno de desarrollo coherente y predecible que admite varios lenguajes de desarrollo, como Java, .NET, Python y Node.js. Los desarrolladores saben que, independientemente de dónde se implemente la aplicación, el contenedor se asegurará de que la aplicación se ejecute según lo previsto.
Cómo funcionan los contenedores
El procesador de un equipo Windows estándar tiene dos modos diferentes: un modo kernel y un modo de usuario. Los componentes principales del sistema operativo y la mayoría de los controladores de dispositivos se ejecutan en el modo kernel, mientras que las aplicaciones se ejecutan en el modo de usuario.
Al instalar la tecnología de contenedor en un equipo, cada contenedor crea un silo aislado y ligero que se usa para ejecutar una aplicación en el sistema operativo host. Un contenedor se basa en el kernel del sistema operativo host y comparte la mayor parte de él para obtener acceso al sistema de archivos y al Registro.
Cada contenedor tiene su propia copia de los archivos del sistema en el modo de usuario, que están aislados de otros contenedores y del propio entorno del modo de usuario del host. La capacidad de aislar el modo de usuario se proporciona mediante una imagen base de contenedor, que consta de los archivos de sistema de modo de usuario que se necesitan para admitir una aplicación empaquetada. Las plantillas de la imagen base del contenedor proporcionan una capa básica de servicios del sistema operativo usados por la aplicación en el contenedor que no se proporcionan (ni restringen) desde la capa del modo kernel del host.
La capa en la que se realizan los cambios en el código y la aplicación esta sobre estas capas de imagen del sistema operativo base del contenedor creadas previamente. Estas capas del sistema operativo base se desarrollan y actualizan por separado de las capas contenedoras que se utilizan activamente para los cambios de aplicación o de código. Las capas base se extraen en el entorno de trabajo local sin actualizarse y, a continuación, el trabajo se inicia en las capas de contenedor que se ejecutan en las capas base. Esto permite que los entornos de desarrollo sean más pequeños, más ligeros y más portátiles.
Al compilar su propia imagen de contenedor para hospedar la aplicación, empiece por aprovechar una imagen de sistema operativo base de contenedor o una imagen de contenedor precompilada que tenga las dependencias que necesita. En la parte superior de estas capas, creará sus propias capas con la aplicación que desea ejecutar en un contenedor. Cada operación para crear la imagen de contenedor se basa en la última. Esto agrega al tamaño de la imagen, pero permite separar convenientemente el sistema operativo, el marco, las dependencias y las capas de aplicación.
Contenedores y microservicios
Las aplicaciones de microservicios se definen como un enfoque arquitectónico nativo en la nube en el que una sola aplicación se compone de muchos componentes o servicios más pequeños de acoplamiento flexible e independientemente. Cada uno de estos componentes o servicios más pequeños se puede representar mediante un contenedor. Sin embargo, los contenedores no implementan necesariamente una arquitectura de microservicios.
Un contenedor puede hospedar una aplicación monolítica, pero no se diseñaron para esa intención. De forma predeterminada, Docker (u otro entorno de ejecución de contenedor), así como el orquestador de contenedores asume que un contenedor siempre se puede eliminar o quitar de forma segura y otro contenedor simplemente puede tener su lugar si es necesario. En una máquina virtual, si configura una aplicación para escribir en el disco de la máquina virtual, puede detener e iniciar la máquina virtual de forma segura y los datos se conservarán en el disco, al igual que la máquina virtual arrancará y continuará su operación de forma segura. Con los contenedores, si quita un contenedor y trae otro en su lugar, solo estarán allí las capas existentes de esa imagen de contenedor. En un entorno de microservicios, esto no debería ser un problema si tiene persistencia del estado y los datos.
Aunque puede ejecutar un contenedor y administrarlo de forma muy similar a una máquina virtual, se recomienda adoptar las prácticas de separación de estado y datos y asegurarse de que el contenedor pueda mantenerse eliminado. Esto le permitirá aprovechar otras prácticas, como DevOps.
En la práctica, debe almacenar cualquier dato o estado dentro de la imagen de contenedor y sus capas. En su lugar, debe usar el almacenamiento persistente externo que permita a cualquier instancia de contenedor acceder a ella.