Docker popularizó la virtualización de contenedores y desplazó en gran medida a las máquinas virtuales (VM), que eran dominantes en ese momento. El triunfo de los contenedores web revolucionó la forma de construir, empaquetar y ejecutar aplicaciones, dado que los contenedores son una unidad de software estandarizada. Estos pueden utilizarse sin problemas siempre y cuando se disponga del correspondiente runtime de contenedores.
A diferencia de las anteriormente omnipresentes, pero bastante pesadas máquinas virtuales, los contenedores son ligeros. De esta manera, se pueden ejecutar miles de contenedores en un solo host. Esta ventaja inherente a la virtualización de los contenedores condujo a la extensión del uso dearquitecturas de microservicios distribuidos. En lugar de construir una aplicación monolítica, se divide el ámbito funcional en componentes individuales y cada componente se empaqueta como un servicio en su propio contenedor. A continuación, los contenedores se inician y los servicios se comunican entre sí a través de la red.
El enfoque de microservicios es especialmente práctico para el desarrollo de software porque permite utilizar las tecnologías más adecuadas para cada servicio. En lugar de estar atados a lenguajes y paradigmas de programación individuales, pueden variar entre los servicios. Además, a medida que se añaden nuevas tecnologías, es más fácil reimplantar servicios individuales.
La posibilidad de clonar varios contenedores semejantes a partir de una imagen de contenedor redunda en la escalabilidad del sistema global. Si la demanda aumenta, se ponen en marcha contenedores adicionales y el servicio respectivo escala horizontalmente. Sin embargo, esto requiere un sistema que supervise los contenedores en ejecución y los termine o, mejor dicho, inicie nuevos contenedores cuando sea necesario. Además, las solicitudes entrantes deben distribuirse a los contenedores individuales.
Con la escalabilidad, la complejidad del sistema crece considerablemente y, por tanto, es recomendable tener en cuenta los siguientes aspectos:
- Recepción de las solicitudes a través del balance de carga
- Distribución de las tareas a los contenedores individuales
- Supervisión del estado de las instancias del contenedor
- Terminar e iniciar nuevas instancias
- Establecer una red entre los contenedores
- Mantener los contenedores o imágenes con actualizaciones, etc.
Todo ello supone una enorme sobrecarga administrativa, pero eso no es todo. Además, está el mantenimiento del propio sistema administrativo. Este nivel de control, que realiza todos los puntos mencionados anteriormente, también debe ser mantenido, supervisado y provisto de actualizaciones. Por supuesto, nunca debería haber una pérdida de rendimiento notable por parte del usuario y la seguridad de todo el sistema debe estar garantizada en todo momento.