Taula de continguts

Docker Compose

Per utilitzar docker-compose cal que abans coneguis a fons Docker.

Referències:

Articles previs:

Segueix a:

, , , , , , , , , ,

Instal·lació

Docker-compose es pot instal·lar fàcilment en Ubuntu:

$ sudo apt install docker-compose

Per suposat, abans cal tenir instal·lat el Docker Engine. Ves a l'article Docker si encara no l'has seguit.


Wordpress amb docker-compose

Mira la documentació oficial del docker Wordpress. Crea l'arxiu docker-compose.yml i posa'l en marxa amb un:

$ docker-compose up -d

Podràs veure que el -d ens allibera la shell i deixa els contenidors funcionant en background.

Per parar-lo, pots fer:

$ docker-compose down

Comprova quins volums s'han creat, fent:

$ docker volume ls


Escalat de contenidors

Una de les funcions importants per la gestió dels contenidors és la de l'escalat o replicació. En el cas de les aplicacions web, és molt habitual necessitar diverses instàncies del servidor web i el seu software (PHP, Python, etc.), mantenint una sola BD centralitzada (replicar la BD és una operació molt més complexa).

Anem a fer un simple servidor web amb el docker nginxdemos/hello:

docker-compose.yml
version: "2"

services:

  web:
    image: nginxdemos/hello
    ports:
      # important marcar el port intern 80 sense assignar a un d'extern
      # docker-machine li asignarà un port extern automàticament
      - 80

Arranquem amb:

docker-compose up -d

Escalem amb:

docker-compose up -d --scale web=3

Comprovem estat dels nodes amb:

docker-compose ps
  Name                 Command               State           Ports        
--------------------------------------------------------------------------
www_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:49159->80/tcp
www_web_2   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:49160->80/tcp
www_web_3   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:49161->80/tcp

A la mostra veiem que cada node té assignat un port, començant pel 49159. Els nombres de port i de container no tenen perquè ser correlatius. Podem accedir-hi mitjançant el browser a la URL:

http://localhost:32768


Balanç de càrrega amb HAProxy

Per a arrodonir aquest exercici necessitem un balancejador de càrrega que enllaci amb un o altre node web.

docker-compose.yml
version: "2"

services:

  web:
    image: nginxdemos/hello
    ports:
      # importante marcar puerto interno 80 sin asignar a uno externo
      # docker-machine le asignará puerto externo automáticamente
      - 80
  lb:
    image: dockercloud/haproxy
    ports:
      - 8085:80
    links:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Veiem que ja no cal redireccionar el port del microservei «web» com hem fet anteriorment.

Ho aixequem tot amb:

docker-compose up -d --scale web=3

Comprovem que estan en marxa els 3 nodes web amb + el HAProxy amb:

docker-compose ps

HAProxy (service lb) ens redirigirà alternativament a un o altre node en cada visita a:

http://localhost:8085


Escalat amb Wordpress

Anem a fer un docker-compose de Wordpress escalable.