Para hablar de servicios de contenedores on-cloud se ha seleccionado AWS por ser la de mayor cuota de mercado entre todas ellas.

Anteriormente en esta misma web, hemos comentado que en AWS no se corresponden exactamente las definiciones de contenedor instancia e imagen. Sin meternos en profundidad en este tema podemos decir que existe la siguiente correspondencia:

  • Imagen = Imagen (AWS)
  • Contenedor = Tarea (AWS)
  • Instancia = Servicio (AWS)
  • Cluster/Swarm = Cluster (AWS)

Así pues, lo habitual es que en AWS para crear un servicio proporcionado por Dockers se sigan estos pasos (en ECS):

  1. Creamos un cluster de recursos (EC2)
  2. Creamos una Tarea (Task)
  3. Creamos un servicio asociando Tasks (una o más task) a un cluster

Servicios que proporciona AWS con contenedores Dockers

Aunque en AWS existen múltiples servicios que utilizan (o pueden utilizar) contenedores en su despliegue (Como BeanStalk) lo cierto es que podemos desplegar contenedores de cuatro maneras posibles (estrictamente hablando):

  1. Usando una AMI (MV EC2) y configurando todo lo necesario para poder generar contenedores dentro de dicha MV. Esta manera es la mas trabajos pero nos da un CONTROL TOTAL tanto d ellos servicios corriendo como de la MV subyacente.
  2. Usando ECS (clásico). Este sistema usa MV EC2 “preconfiguradas” con el demonio docker (Docker CE) en el cluster que creemos y que nos ayuda a “orquestar” todos los contenedores gestionando también políticas de autoescalado no solo en los contenedores sino también en las propias MV’s. Esto tiene un coste técnico alto como el caso anterior y el control de todos los elementos es muy grande también.
  3. Usando FARGATE. Es un poco “injusto” denominarlo como un servicio “separado” de ECS ya que es en el propio ECS donde se puede seleccionar una estructura “clásica” o de FARGATE. Este esquema es totalmente “serverless” solo necesito decirle la capacidad de lo que quiero y es AWS quien se encarga de aprovisionarme de las maquinas (o la computación) que requiero. Esta estructura es la mas simple de implementar pero perdemos algo de control sobre nuestra estructura (por ejemplo perdemos la capacidad de mapear nuestros puertos)
  • Usando Kubernetes. Kubernetes es un software OpenSource que permite “orquestar” contenedores en cualquier plataforma donde esté instalado (on-prmise u on-cloud). Digamos que Kubernetes es una “suite” de herramientas con una interface bastante “amigable” de gestión, creación y control de nuestros servicios a través de contenedores docker. Su configuración no es trivial y es bastante mas compleja que los ejemplos anteriores, pero una vez está desplegada su gestión y adaptación a nuevos requerimientos es muy sencilla y a través de una GUI adaptada para ello. Su gran ventaja es que casi todas las plataformas on-cloud la implementan con lo que una vez nos habituemos a este entorno podremos manejarlo independientemente del proveedor del servicio (AWS, Azure, Google Cloud, etc…). Por último Kubernetes también nos ofrece la versión FARGATE.