bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
docker-compose

Aquesta és una revisió antiga del document


Docker Compose

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

Referències:

Articles previs:

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
lb:
image: dockercloud/haproxy
ports:
- 8080:80
links:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock

Podemos ver que ya no hace falta redireccionar el puerto del microservicio web como hemos hecho anteriormente. Levantamos el servicio completo con: # docker-compose up -d –scale web=3 Comprovamos que estan en marcha los 3 nodos web + el nodo HAProxy con: # docker-compose ps HAProxy (servicio lb) nos redirigirá alternativamente a uno u otro nodo en cada visita a: http://localhost:8080Ejercicio: escalado con Wordpress Crea un docker-compose similar al ejemplo realizado pero con un Wordpress (puedes tomar el ejemplo de la imagen oficial de Docker Hub). Configuralo para poder escalar el contenedor de wordpress (el de la base de datos ha de ser único) y añádele un HAProxy como el del ejemplo. En total tendrá, pues, 3 servicios: db, wordpress y lb (load balancer). Comprueba que funciona correctamente escalando a 4 instancias de Wordpress y que puedes conectarte a través del puerto configurado en el HAProxy. Para asegurarnos de que realmente HAProxy alterna entre los diferentes nodos, edita el archivo de Wordpress para forzar a mostrar la IP del servidor: # vi /var/lib/docker/volumes/scaled-wp_wordpress/_data/wp-content/themes/ twentytwentyone/index.php (Dependiendo de la versión de Wordpress puede cambiar el nombre del theme , en este caso es el twtentytwentyone pero podria ser otro). Introduce esta línia después de get_header() : echo «IP Address: ».$_SERVER[«SERVER_ADDR»]; Comprueba ahora que al ir a la main page del Wordpress se visualiza la IP y que al recargar vamos alternando entre las diversas IPs.

Escalat de Wordpress

Anem a veure com escalar el sistema Wordpress que hem muntat amb el docker-compose oficial.

Aixeca'l de nou amb:

$ docker-compose up -d

Prova d'escalar-ho amb:

$ docker-compose up --scale wordpress=3

Veurem que no ens deixa i ens dona un error de que el port està en ús:

Cannot start service wordpress: ... : Bind for 0.0.0.0:8080 failed: port is already allocated

És normal ja que no puc replicar diversos contenidors que es publiquin al mateix port de la màquina host. La solució és canviar la línia de publicació del port 80 i substituir-la per aquesta, on no s'especifica el port de la màquina host. D'aquesta manera, cada docker es publicarà en un port que docker-engine triarà a la seva conveniència:

docker-compose.yml
  ...
  wordpress:
    ...
    ports:
      - 80    # abans era 8080:80
  ...

Per poder publicar tots els contenidors al mateix rang, podem destruir els contenidors wordpress i no el de la BD:

$ docker-compose rm -f wordpress

I els tornem a aixecar amb:

$ docker-compose up -d --scale wordpress=3

Podem veure els contenidors creats amb:

$ docker-compose ps


docker-compose.1635260473.txt.gz · Darrera modificació: 2021/10/26 15:01 per enrique_mieza_sanchez