bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


docker-compose

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
docker-compose [2021/10/26 15:01]
enrique_mieza_sanchez
docker-compose [2023/10/17 18:28] (actual)
enric_mieza_sanchez [Escalat amb Wordpress]
Línia 10: Línia 10:
   * [[Docker]] pràctiques inicials a bytes.cat   * [[Docker]] pràctiques inicials a bytes.cat
  
-{{tag> #Asix #Ceti #Ciber #CetiMp03 #CiberMp03 }}+Segueix a: 
 +  * [[Docker upgrade de containers]] 
 +  * [[Dockerfile]] 
 + 
 + 
 +{{tag> #FpInfor #Asix #Ceti #Ciber #CetiMp03 #CiberMp03 DevOps docker docker_compose compose wordpress }}
  
 ===== Instal·lació ===== ===== Instal·lació =====
Línia 71: Línia 76:
 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: 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   http://localhost:32768
-  + 
 +\\ 
 ===== Balanç de càrrega amb HAProxy ===== ===== 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. Per a arrodonir aquest exercici necessitem un balancejador de càrrega que enllaci amb un o altre node web.
Línia 77: Línia 84:
 <file yaml docker-compose.yml> <file yaml docker-compose.yml>
 version: "2" version: "2"
 +
 services: services:
-web: 
-image: nginxdemos/hello 
-lb: 
-image: dockercloud/haproxy 
-ports: 
-- 8080:80 
-links: 
-- web 
-volumes: 
-- /var/run/docker.sock:/var/run/docker.sock 
-</file> 
  
-Podemos ver que ya no hace falta redireccionar el puerto del microservicio web como hemos hecho +  web: 
-anteriormente. +    imagenginxdemos/hello
-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: +
-<file yml docker-compose.yml> +
-  ... +
-  wordpress: +
-    ...+
     ports:     ports:
-      - 80    # abans era 8080:80 +      # 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
 </file> </file>
  
-Per poder publicar tots els contenidors al mateix rang, podem destruir els contenidors wordpress i no el de la BD: +Veiem que ja no cal redireccionar el port del microservei "web" com hem fet anteriorment.
-  $ docker-compose rm -f wordpress+
  
-I els tornem a aixecar amb: +Ho aixequem tot amb: 
-  docker-compose up -d --scale wordpress=3+  docker-compose up -d --scale web=3 
 +   
 +Comprovem que estan en marxa els 3 nodes web amb + el HAProxy amb: 
 +  docker-compose ps
  
-Podem veure els contenidors creats amb+HAProxy (service lb) ens redirigirà alternativament a un o altre node en cada visita a
-  $ docker-compose ps+  http://localhost:8085
  
 \\ \\
 +
 +===== Escalat amb Wordpress =====
 +
 +<WRAP todo>
 +Anem a fer un ''docker-compose'' de Wordpress escalable.
 +  * Crea un docker-compose a partir de l'[[https://hub.docker.com/_/wordpress|exemple oficial de la pàgina de Docker Wordpress]]
 +  * Configura'l per a poder escalar el contenidor de wordpress (el de la base de dades ha de ser únic).
 +  * Afegeix també un LB (o //load balancer//) ''HAProxy'' com el de l'exemple anterior.
 +  * En total ha de tenir 3 serveis: wordpress, db i lb.
 +  * Assegura't que:
 +    * El //service// ''wordpress'' no té assignat un port extern (si ho té, no podrà escalar).
 +    * No t'interfereix la instal·lació de Wordpress anterior. Per assegurar-ho fes una nova carpeta amb nova instal·lació. Si vols aprofitar la que tenies, mira que el port del LB (HAProxy) sigui el mateix que el de la instal·lació anterior.
 +    * El LB apunta al servei ''wordpress'', i no al ''web'' de l'exemple.
 +  * Comprova que funciona correctament escalant a 4 instàncies de Wordpress i que pots connectar-te a través del port configurat al HAProxy.
 +  * Per assegurar-nos de que realment HAProxy alterna entre els diferents nodes, forçarem a mostrar la IP del servidor. Farem un //hack// per mostrar la IP del container que ens està servint:<tabbox Opció hack 1>
 +      * Edita l'arxiu:<WRAP prewrap><code>
 +$ sudo vi /var/lib/docker/volumes/scaled-wp_wordpress/_data/index.php
 +</code></WRAP>
 +      * Introdueix aquesta línia just després del ''define'':<code>
 +echo "IP Address: ".$_SERVER["SERVER_ADDR"];
 +</code>
 +<tabbox Opció hack 2 (theme twentytwentyone)>
 +   * Activa el tema ''twentytwentyone'' (fons verd) des de l'admin panel del wordpress.
 +   * Edita l'arxiu:<WRAP prewrap><code>
 +$ sudo vi /var/lib/docker/volumes/scaled-wp_wordpress/_data/wp-content/themes/twentytwentyone/header.php
 +</code></WRAP>
 +   * Introdueix aquesta línia després del ''wp_body_open()'':<code>
 +echo "IP Address: ".$_SERVER["SERVER_ADDR"];
 +</code>
 +</tabbox>
 +  * **Comprova ara que a l'anar a la //main page// del Wordpress es visualitza la IP i que al recarregar anem alternant entre les diverses IPs**.
 +
 +</WRAP>
  
  
  
docker-compose.1635260473.txt.gz · Darrera modificació: 2021/10/26 15:01 per enrique_mieza_sanchez