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 14:32]
enrique_mieza_sanchez [Escalat de contenidors]
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 40: Línia 45:
 {{load_balancer.png}} {{load_balancer.png}}
  
-Anem a veure com escalar el sistema Wordpress que hem muntat amb el docker-compose oficial.+Anem a fer un simple servidor web amb el docker ''nginxdemos/hello'': 
 +<file yaml docker-compose.yml> 
 +version: "2"
  
-Aixeca'l de nou amb: +services:
-  $ docker-compose up -d+
  
-Prova d'escalar-ho amb: +  web: 
-  docker-compose up --scale wordpress=3+    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
  
-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: 
-      - 80    # abans era 8080:80 
-  ... 
 </file> </file>
  
-Per poder publicar tots els contenidors al mateix rang, podem destruir els contenidors wordpress i no el de la BD+Arranquem amb
-  docker-compose rm -f wordpress+  docker-compose up -d
  
-I els tornem a aixecar amb: +Escalem amb: 
-  docker-compose up -d --scale wordpress=3+  docker-compose up -d --scale web=3
  
-Podem veure els contenidors creats amb: +Comprovem estat dels nodes amb: 
-  docker-compose ps+  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
  
 \\ \\
  
-===== Actualització de contenidors =====+===== 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.
  
-Després de fer una instal·lació caldrà mantenir-la, i fer un //update// és una pràctica imprescindible per posar remei a certes vulnerabilitats.+<file yaml docker-compose.yml> 
 +version: "2"
  
-Algunes consideracions: +services:
-  * Cada CMS o software tenen la seva pròpia manera de dockeritzar-se i hi ha algunes pràctiques o tendències comunes. +
-  * No es pot generalitzar un procés únic d'actualització. +
-  * Com veurem, un cop realitzada la instal·lació i amb el volum persistit, canviar el container pot no canviar directament la versió del //software// del CMS. Actualitzar el container de Wordpress només actualitza la versió de PHP i no la del CMS. +
-    * Veurem dos casos paradigmàtics, el docker de Wordpress no canvia la seva versió i el Mediawiki, en canvi, sí. Tot depèn de com han estat configurats.  +
-  * Per actualitzar, finalment, caldrà fer-ho des del propi //backend// del CMS.+
  
-<WRAP tip> +  web: 
-Si hi hagués algun conflicte amb les versions de partida i destí de PHP que necessita el CMS, una possible solució seria fer l'actualització en 2 passes, passant per una versió intermitja que tingui una versió de PHP compatible amb les dues versions+    image: nginxdemos/hello 
-</WRAP>+    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 
 +</file>
  
-==== Actualitzar Wordpress docker ==== +Veiem que ja no cal redireccionar el port del microservei "web" com hem fet anteriorment.
-<WRAP todo> +
-Actualització de contenidors: +
-  * Instal·la la versió 4 de Wordpress en una nova carpeta de projecte. +
-    * Caldrà que canviïs el //tag// del contenidor //wordpress//+
-  * Per identificar si l'upgrade funciona, cal que personalitzem la instal·lació: +
-    * Edita el nom del //blog// +
-    * Afegeix un article que es vegi a la portada. +
-    * Personalitza el skin (canvia per algun ben diferent del //default//). +
-  * Entra al contenidor del //wordpress// i comprova quines versions tenim: +
-    * Versió de PHP +
-    * Versió exacta del Wordpress (li hem dit la 4, però no sabem si haurà instal·lat la 4.1 o la 4.8.2...)+
  
-Passem a fer l'upgrade+Ho aixequem tot amb
-  * Apaga el projecte de contenidors amb un ''down''. +  docker-compose up -d --scale web=3 
-  * Canvia el //tag// a la darrera versió estable (no facis //latest//, ja que al traslladar el container a un altre lloc en un altre moment ens podria descarregar una altra versió). +   
-  * Engega de nou el projecte. +Comprovem que estan en marxa els 3 nodes web amb + el HAProxy amb: 
-  * Visualitza el Wordpress per veure si segueix funcionant. +  docker-compose ps 
-  * Entra al contenidor //wordpress// i comprova les versions de PHP i del propi WP. + 
-    * Quins canvis hi ha hagut? +HAProxy (service lb) ens redirigirà alternativament a un altre node en cada visita a: 
-</WRAP>+  http://localhost:8085
  
 \\ \\
  
-==== Actualitzar Mediawiki docker ==== +===== Escalat amb Wordpress =====
-Aquest cas és diferent de l'anterior. Canviar el contenidor sí que modificarà la versió del //software// del CMS.+
  
 <WRAP todo> <WRAP todo>
-  - [[https://hub.docker.com/_/mediawiki|Instal·la Mediawiki amb Docker]] amb algunes modificacions: +Anem a fer un ''docker-compose'' de Wordpress escalable. 
-    Canviar al ''docker-compose'' la versió de Mediawiki a la 1.31+  * Crea un docker-compose a partir de l'[[https://hub.docker.com/_/wordpress|exemple oficial de la pàgina de Docker Wordpress]] 
-    Persisir les carpetes: +  Configura'l per poder escalar el contenidor de wordpress (el de la base de dades ha de ser únic)
-      * ''/var/lib/mysql'' del contenidor ''database'+  Afegeix també un LB (o //load balancer//) ''HAProxy'' com el de l'exemple anterior. 
-      * ''/var/www/html/images'' del contenidor ''mediawiki'' +  En total ha de tenir 3 serveis: wordpress, db i lb. 
-  - Tal i com s'explica a la documentació i als comentaris del docker-composecal descarregar ''LocalSettings.php'' al mateix directori del ''docker-compose.yml'' i descomentar la línia:<code>#./LocalSettings.php:/var/www/html/LocalSettings.php</code> +  * Assegura't que: 
-  - Destruir (down) i arrencar de nou (up) la instància. Comprovar que funciona i afegir alguna frase la pàgina principal per a testejar+    * El //service// ''wordpress'' no té assignat un port extern (si ho té, no podrà escalar). 
-  - Comprovar que tenim la versió 1.31 a la pàgina<code>http://localhost:8080/index.php/Especial:Versió</code> +    * 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 teniesmira que el port del LB (HAProxy) sigui el mateix que el de la instal·lació anterior. 
-  - Destruir la instància mitjançant:<code>docker-compose down</code> +    * El LB apunta al servei ''wordpress'', i no al ''web'' de l'exemple
-  - Canviar (actualitzarla versió de Mediawiki a la 1.36 +  * Comprova que funciona correctament escalant a 4 instàncies de Wordpress que pots connectar-te través del port configurat al HAProxy
-  - Posar en marxa de nou la instància. +  * Per assegurar-nos de que realment HAProxy alterna entre els diferents nodes, forçarem a mostrar la IP del servidorFarem un //hack// per mostrar la IP del container que ens està servint:<tabbox Opció hack 1> 
-  - Consultar la pàgina d'actualització oficial de la Mediawiki. Al canviar el //docker// hem actualitzat el software (codi PHPperò cal actualitzar les taules de la BD+      * Edita l'arxiu:<WRAP prewrap><code> 
-  - Actualitzar la BD anant a <code>http://localhost:8080/mw-config</code> +$ sudo vi /var/lib/docker/volumes/scaled-wp_wordpress/_data/index.php 
-  - Ens demanarà la ''upgrade-key'' que està a LocalSettings.php . Seguim el procès d'upgrade fins el final+</code></WRAP
-  - Comprovar que s'ha actualitzat correctament la versió de Mediawiki.+      * 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 verddes 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> </WRAP>
  
-\\ 
  
  
docker-compose.1635258763.txt.gz · Darrera modificació: 2021/10/26 14:32 per enrique_mieza_sanchez