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:
- https://github.com/docker/dockercloud-haproxy: Imagen de HAProxy de DockerCloud para el balanceo.
- https://github.com/jhidalgo3/springboot-demo-docker-loadbalancer : Imagen con un proyecto en Springboot que muestra el balanceo entre contenedores.
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.