Prerequisits: conèixer Docker i Docker Swarm.
Els stacks son arxius de configuració de serveis per a Docker Swarm, amb la mateixa sintaxi que el docker-compose
però amb alguns paràmetres afegits, en particular a través de l'etiqueta deploy.
Anem a posar en marxa una xarxa amb dos serveis:
Traefik és un balancejador de càrrega i proxy invers basat en el llenguatge de programació Go! de Google molt emprat en orquestradors de contenidors.
Podràs visualitzar 2 webs (l'exemple és amb la IP que tenim configurada al Vagrantfile de Docker Swarm:
Error 404: page not found
./etc/hosts
i apuntar el domini whoami.docker.local
a la IP de la màquina swarm./etc/hosts
que s'ha d'actualitzar és el de la màquina on estiguem executant el browser, probablement serà la teva màquina física.whoami
al navegador a: http://whoami.docker.local
version: '3' services: traefik: image: traefik:v1.7 command: --web \ --docker \ --docker.swarmmode ports: # The HTTP port - "80:80" # The Web UI (enabled by --api.insecure=true) - "8080:8080" volumes: # So that Traefik can listen to the Docker events - /var/run/docker.sock:/var/run/docker.sock networks: - net deploy: placement: constraints: [node.role==manager] whoami: # A container that exposes an API to show its IP address image: containous/whoami deploy: labels: - "traefik.enable=true" - "traefik.backend=whoami" - "traefik.docker.network=net" - "traefik.port=80" - "traefik.frontend.rule=Host:whoami.docker.local" #- "traefik.backend.loadbalancer.sticky=true" networks: - net networks: net:
Per posar en marxa el stack ho podem fer d'aquestes dues maneres (amb una basta!):
docker stack deploy --compose-file whoami.stack.yml who docker stack deploy -c whoami.stack.yml who
I ara, escalem el servei whoami
:
docker service scale who_whoami=5 docker stack ls
Mira el backend d'administració del traefik
Posa en marxa el servei whoami a través del stack i visualitza la web del whoami.
Ara descomenta la línia amb - «traefik.backend.loadbalancer.sticky=true»
i posa en marxa de nou el stack.
curl
?curl
la IP ha de variar. Si no ho fa pot ser que no hagis escalat el servei whoami
(o que hagis actualitzat amb docker stack deploy
i s'haurà resetejat a 1 instància).whoami
.curl
?
Anem a fer una implementació de Wordpress amb Docker Swarm seguint l'arquitectura proposada en aquest diagrama:
Elabora un stack per allotjar una configuració de Wordpress.
Tingues en compte que la BD cal que estigui fixa al mateix node, ja que els volums NO es comparteixen entre màquines. Busca quina restricció ens ho permet realitzar.
Com a load balancer pots optar entre fer servir el propi de Docker Swarm (no cal crear cap servei específic, el mateix sistema ho facilita) o bé pots afegir un load balancer propi com traefik (en aquest cas sí que cal crear un servei, tens un exemple en l'anterior configuració).
Docker Swarm ens permet no deixar la contrasenya en els arxius de configuració, utilitzant DOCKER SECRETS. Mitjançant aquest mecanisme posarem les contrasenyes, claus i altres dades sensibles a la RAM del Swarm, el què significarà un nivell més alt de seguretat.
Aquest és un exemple:
$ echo "micontraseña" | docker secret create mysql_password -
Els contenidors poden veure les contrasenyes accedint a, per exemple: /run/secrets/mysql_password
.
Les podem utilitzar al fitxer de stack així:
services: ... db: ... environment: ... MYSQL_USER: wordpress MYSQL_PASSWORD_FILE: /run/secrets/mysql_password secrets: - mysql_password ... secrets: - mysql_password - external: true
Per tal de facilitar la interoperativitat dels nodes en un Swarm es pot utilitzar un sistema d'arxius distribuit com GlusterFS.
Tens aquí algunes referències per instal·lar-lo: