Cuándo se deben usar los contenedores de Docker

Como hemos visto, Docker tiene varias características que podemos usar. Aquí veremos las ventajas que aporta Docker a nuestros equipos de desarrollo y de operaciones. También veremos algunos escenarios en los que es posible que Docker no sea la mejor solución.

Estos aspectos le ayudarán a decidir si Docker es una buena opción para su estrategia de creación de contenedores.

Recuerde que había una serie de desafíos a los que se enfrentaba nuestro equipo a la hora de desarrollar y publicar nuestro portal de seguimiento de pedidos. Buscaba una solución para:

  • Administrar los entornos de hospedaje con facilidad.
  • Garantizar la continuidad en la forma de entrega de software.
  • Asegurar que se hace un uso eficaz del hardware de servidor.
  • Permitir la portabilidad de las aplicaciones.

Docker es la solución a estos desafíos. Echemos un vistazo a todas las ventajas que hemos cubierto hasta ahora.

Ventajas de Docker

Cuando se usa Docker, se obtiene acceso inmediato a los beneficios que ofrece la creación de contenedores.

Uso eficaz del hardware

Los contenedores se ejecutan sin usar una máquina virtual (VM). Como hemos visto, el contenedor se basa en el kernel del host para llevar a cabo funciones como la administración del sistema de archivos, la administración de redes, la programación de procesos y la administración de memoria.

Diagrama en el que se compara el uso de recursos de máquina virtual frente al uso de recursos de Docker.

En comparación con una máquina virtual, vemos que esta requiere un sistema operativo instalado para proporcionar funciones de kernel a las aplicaciones en ejecución dentro de la misma. Tenga en cuenta que el sistema operativo de la máquina virtual también requiere espacio en disco, memoria y tiempo de CPU. Al eliminar la máquina virtual y el requisito del sistema operativo adicional, podemos liberar recursos en el host y usarlo para ejecutar otros contenedores.

Aislamiento de contenedores

Los contenedores de Docker proporcionan características de seguridad para ejecutar varios contenedores simultáneamente en el mismo host sin que afecten unos a otros. Como hemos visto, podemos configurar el almacenamiento de datos y la configuración de red para aislar nuestros contenedores o compartir datos y conectividad entre contenedores específicos.

Vamos a comparar esta característica con el uso de máquinas virtuales.

Diagrama en el que se muestra un host físico que ejecuta varias máquinas virtuales.

Supongamos que tenemos un host físico que ejecuta dos máquinas virtuales. Tenemos tres aplicaciones que queremos que se ejecuten aisladas unas de otras. Decidimos implementar la primera aplicación en la máquina virtual 1 y la segunda en máquina virtual 2 para separar las dos aplicaciones. Si ahora queremos instalar la tercera aplicación, tendremos que instalar otra máquina virtual para continuar con este patrón.

Portabilidad de las aplicaciones

Los contenedores se ejecutan prácticamente en cualquier lugar, como en equipos de escritorio, servidores físicos, máquinas virtuales y en la nube. Esta compatibilidad en tiempo de ejecución facilita el traslado de aplicaciones en contenedores entre distintos entornos.

Al ser ligeros, los contenedores no sufren tiempos de inicio o apagado lentos como las máquinas virtuales. Este aspecto hace que la reimplementación y otros escenarios de implementación, como el escalado o la reducción vertical, sean fluidos y rápidos.

Entrega de aplicaciones

Con Docker, el contenedor es la unidad que usamos para distribuir las aplicaciones. Este concepto garantiza que disponemos de un formato de contenedor normalizado que usan nuestros equipos de desarrollo y operaciones. Nuestros desarrolladores pueden centrarse en el desarrollo de software y el equipo de operaciones en la implementación y administración del software.

Podemos usar el contenedor en cada paso de nuestro sistema de implementación después de que nuestro equipo de desarrollo publique una compilación de nuestra aplicación. Los contenedores son candidatos ideales para una integración continua y agilizan el tiempo que transcurre desde la compilación hasta la producción.

Administración de entornos de hospedaje

El entorno de la aplicación se configura internamente en el contenedor. Esta independencia proporciona flexibilidad a nuestro equipo de operaciones para administrar el entorno de la aplicación más minuciosamente. Nuestro equipo puede supervisar las actualizaciones del sistema operativo y aplicar revisiones de seguridad una vez, así como implementar el contenedor actualizado según sea necesario.

Nuestro equipo también puede administrar las aplicaciones que se van a instalar, actualizar y quitar sin que esto afecte a otros contenedores. Cada contenedor está aislado y sus límites de recursos se asignan de forma independiente.

Implementaciones en la nube

Los contenedores de Docker son la arquitectura de contenedor predeterminada que se usa en los servicios de creación de contenedores de Azure, pero son compatibles con muchas otras plataformas en la nube.

Por ejemplo, puede implementar contenedores de Docker en Azure Container Instances, Azure App Service y Azure Kubernetes Service. Cada una de estas opciones proporciona diferentes características y funcionalidades.

Por ejemplo, Azure Container Instances le permite centrarse en el diseño y el desarrollo de las aplicaciones sin la sobrecarga de tener que administrar la infraestructura. Y si necesita coordinar muchos contenedores, Azure Kubernetes Service facilita la implementación y la administración de implementaciones de contenedores a gran escala.

Cuándo no se deben usar los contenedores de Docker

Los contenedores de Docker nos proporcionan muchas ventajas, como hemos visto. Tenga presente que es posible que los contenedores no se ajusten a todos sus requisitos. Hay algunos aspectos que se deben tener en cuenta.

Seguridad y virtualización

Los contenedores proporcionan un nivel de aislamiento, pero comparten un único kernel del sistema operativo del host, que puede ser un único punto de ataque.

También es necesario tener en cuenta la configuración de ciertos aspectos, como el almacenamiento y las redes, para asegurarnos de que consideramos todos los aspectos de seguridad. Por ejemplo, todos los contenedores usan la red de puente de forma predeterminada y pueden acceder unos a otros a través de la dirección IP.

No todas las aplicaciones se beneficiarán de la creación de contenedores. En estos casos, puede tener más sentido usar una máquina virtual.

Supervisión de los servicios

La administración de las aplicaciones y de los contenedores es más complicada que las implementaciones de máquinas virtuales tradicionales. Existen características de registro que nos indican el estado de los contenedores en ejecución, pero es más difícil de supervisar la información detallada de los servicios dentro del contenedor.

Por ejemplo, Docker nos proporciona el comando docker stats. Este comando devuelve información para el contenedor como el porcentaje de uso de CPU, el porcentaje de uso de la memoria, las entradas o salidas escritas en el disco, los datos de red enviados y recibidos, y los identificadores de proceso asignados. Esta información es útil como flujo de datos inmediato, pero no se realiza ninguna agregación, ya que los datos no se almacenan. Tendremos que instalar software de terceros para capturar datos significativos durante un período de tiempo.