Taula de continguts

Docker Swarm: treballant amb stacks

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.

, , , , , , , , , , ,


Primer docker stack amb traefik

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:

whoami.stack.yml
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

Sticky sessions

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.


Wordpress en swarm

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 secrets

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


Gluster Filesystem

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: