Enmilocalfunciona

Thoughts, stories and ideas.

Configurando Docker Swarm en Azure

Publicado por Jose Maria Hidalgo Garcia el

DockerDevOpsCloudDocker SwarmMicrosoft Azure

En este post veremos la configuración necesaria para tener rápidamente un cluster de Docker con Docker Swarm funcionando sobre Microsoft Azure.

Antes de empezar

1.- Asegúrate de tener instalado y configurado docker-machine en tu sistema operativo https://docs.docker.com/machine/install-machine/

2.- Debes disponer de una cuenta en Azure y localizar tu Azure Subscription Id. Esa información se puede consultar en el portal de Azure, desde la opción Facturación -> Subscripciones.

Creando las máquinas en Azure con docker-machine

Si cumples con los pre-requisitos, ¡manos a la obra!.

Primero tendremos que crear la máquina que será el Manager del cluster de Docker Swarm. Las máquinas tendrán las siguientes características:

  • Localización: Europa del Oeste.
  • Imagen: Ubuntu 16.04.
  • Regla del firewall para acceder por el puerto 80.
  • Tamaño: Standard_A0 La más pequeña disponible.

Más información en la documentación oficial (https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-linux-sizes#a-series)

Éste es el comando a ejecutar para crear la máquina que contendrá el Manager:

docker-machine create -d azure \  
  --azure-ssh-user ops \
  --azure-subscription-id <Your AZURE_SUBSCRIPTION_ID> \
  --azure-open-port 80 \
  --azure-location westeurope \
  --azure-image canonical:ubuntuserver:16.04.0-LTS:16.04.201611150 \
  --azure-size Standard_A0 \
  az-swarm-manager

Continuaremos creando un Worker para el cluster:

docker-machine create -d azure \  
  --azure-ssh-user ops \
  --azure-subscription-id <Your AZURE_SUBSCRIPTION_ID> \
  --azure-open-port 80 \
  --azure-location westeurope \
  --azure-image canonical:ubuntuserver:16.04.0-LTS:16.04.201611150 \
  --azure-size Standard_A0 \
  az-swarm-worker-1

Al listar las máquinas creadas podrás comprobar que aparecen conectadas a Azure:

Configurando el cluster de Docker Swarm

Lo primero será iniciar el manager del cluster sobre las máquinas creadas:

docker-machine ssh az-swarm-manager sudo docker swarm init --advertise-addr eth0  

De la información devuelta, copiaremos el comando facilitado por el manager y lo ejecutaremos. Debe ser parecida a la siguiente, pero es muy probable que cambie el token y la IP:

docker-machine ssh az-swarm-worker-1 sudo docker swarm join \  
 --token SWMTKN-1-5uotxupbepruz2825snt4nd3j49ad5glxf3qsrzq1qb3csth8j-8xsku3fkbmas7fboyln9w3aht \
  192.168.0.4:2377

Antes de seguir es necesario comprobar que todo se encuentra configurado correctamente. Para ello, activaremos la máquina “az-swarm-manager” para trabajar con ella. Ejecutaremos dos comandos:

docker-machine env az-swarm-manager  

y después:

eval $(docker-machine env az-swarm-manager)  

Al ejecutar “docker info” ya debería aparecer la información del cluster:

¡Listo!, ya dispones de un cluster de "Docker Swarm" preparado para el despliegue.

Despliegue de un servicio en Docker Swarm con HAProxy para el balanceo
Recursos

Para la siguiente demostración se usarán las siguientes images Docker:

Demo

En primer lugar, tendremos que crear la red para agrupar la demo:

docker network create -d overlay proxy  

Crear el servicio de HAProxy, fijándolo para que el contenedor se instancie en el Manager del cluster. Eso es posible con la instrucción “--constraint "node.role == manager"

docker service create --name haproxy --network proxy --mount target=/var/run/docker.sock,source=/var/run/docker.sock,type=bind -p 80:80 --constraint "node.role == manager" dockercloud/haproxy  

A continuación arrancaremos el servicio de ejemplo, esta vez sin restricción de instancia:

docker service create -e SERVICE_PORTS="8080" -e VIRTUAL_HOST=demo.azure --name demo --network proxy jhidalgo3/springboot-demo-docker-loadbalancer  

Una vez arrancado, escalaremos el servicio “demo” para disponer de 2 contenedores:

docker service scale demo=2

Por último, añadimos en el /etc/hosts de nuestro sistema operativo, la siguiente entrada con la IP externa de la máquina que es manager del cluster.

Para obtener la IP de la máquina Manager lo mas sencillo es listar las máquinas con docker-machine con la siguiente instrucción "docker-machine ls":

En el ejemplo la entrada para el /etc/hosts sería la siguiente:

52.174.148.68 demo.azure

Resultado

Al acceder a la url http://demo.azure en un navegador debería aparecer lo siguiente:

Si te ha gustado, anímate a comentar el artículo.

¡Por cierto!, sigue a En Mi Local Funciona en Twitter si quieres estar enterado de las últimas publicaciones.