La idea és disposar d'un clúster amb Docker Engine i poder instanciar-hi allà els nostres contenidors Docker.
Docker Swarm: Ens permet crear un clúster Docker. El node màster rebrà i distribuirà els contenidors als nodes secundaris on s'executaran.
Consul: Ens proporcionarà el servei de discovery dels nous nodes que afegim al clúster swarm.
Requeriments previs
- Docker Engine: Ens permet crear els contenidors, gestionar-los i instanciar-los
- Docker Machine: Ens permet crear i gestionar les maquines virtuals
- Driver Docker Machine Opennebula: Ens permet utilitzar el docker-machine al cloud de l'OpenNebula
Instal·lar el requeriments:
Per a poder implementar el Docker Swarm Clúster amb l'OpenNebula hem d'instalar: Docker Engine, Docker Machine i el Driver de Docker Machine per l'Opennebula.
Teniu disponible el següent tutorial de com fer-ho: DOCKER-1 Docker Machine OpenNebula Driver
Consul
Disposarem d'una maquina virtual amb Docker Engine que ens proporcionarà el servei de discovery amb Consul
Farem servir el driver de Docker Machine per l'OpenNebula, i crearem una màquina virtual anomenada Consul, on després executem un contenidor amb el propi servei de Consul dins d'aquesta.
docker-machine create -d opennebula --opennebula-network-id [network_id] --opennebula-image-id [boot2docker_image_id] --opennebula-b2d-size [volatile_disk_size] consul docker $(docker-machine config consul) run -d -p "8500:8500" -h "consul" progrium/consul -server -bootstrap CONSUL_IP=$(docker-machine ip consul)
Docker Swarm
Disposarem de dos tipus de màquines virtuals amb Swarm:
- Swarm Master: Aquesta màquina amb swarm serà l'encarregada de distribuir les instàncies dels contenidors als diferents nodes que tinguem al clúster.
- Swarm Node: Aquesta o aquestes màquines seran les que executaran propiament els contenidors Docker.
Swarm-master
Creem la màquina virtual, amb el driver de Docker Machine, pel node màster dels clúster:
docker-machine create -d opennebula --opennebula-network-id [network_id] --opennebula-image-id [boot2docker_image_id] --opennebula-b2d-size [volatile_disk_size] --swarm --swarm-master --swarm-discovery="consul://$CONSUL_IP:8500" --engine-opt cluster-store=consul://$CONSUL_IP:8500 --engine-opt cluster-advertise="eth0:2376" swarm-master
Swarm-node
Creem la màquina virtual amb el driver de Docker Machine, pels diferents nodes dels clúster:
docker-machine create -d opennebula --opennebula-network-id [network_id] --opennebula-image-id [boot2docker_image_id] --opennebula-b2d-size [volatile_disk_size] --swarm --swarm-discovery="consul://$CONSUL_IP:8500" --engine-opt cluster-store=consul://$CONSUL_IP:8500 --engine-opt cluster-advertise="eth0:2376" swarm-node-01
Podem crear tants nodes com vulguem. Només hem d'anar modificant el nom de la màquina virtual.
Connexió amb el Swarm-master
Un cop hem creat les diferents màquines virtuals que composen el clúster, podem connectar-nos al node màster amb la següent comanda:
eval $(docker-machine env --swarm swarm-master)
docker info
Xarxa
Un cop tenim creat el nostre clúster amb Swarm també tenim l'opció de podercrear xarxes privades dins del clúster.
docker network create --driver overlay --subnet=10.0.1.0/24 overlay_net docker network ls
Per a més informació : http://opennebula.org/docker-swarm-with-opennebula/
Exemple d'ús
Executar contenidors Docker al clúster creat:
Ara podem començar a fer servir Docker sobre el clúster que acabem de crear:
Utilitzarem un contenidor amb nginx, per exemple:
docker pull nginx docker run --name mynginx -d -p 80:80 nginx
Podem comprovar com el contenidor s'està executant en un node del clúster:
Podem observar que el contenidor amb el nostre nginx esta corrent a la màquina swarm-node-01docker ps
Per accedir al servei del contenidor hem de posar la direcció IP del node del clúster al navegador.