Per utilitzar docker-compose cal que abans coneguis a fons Docker.
Referències:
Articles previs:
Segueix a:
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.
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
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
:
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
Per a arrodonir aquest exercici necessitem un balancejador de càrrega que enllaci amb un o altre node web.
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
Anem a fer un docker-compose
de Wordpress escalable.
HAProxy
com el de l'exemple anterior.wordpress
no té assignat un port extern (si ho té, no podrà escalar).wordpress
, i no al web
de l'exemple.$ sudo vi /var/lib/docker/volumes/scaled-wp_wordpress/_data/index.php
define
:echo "IP Address: ".$_SERVER["SERVER_ADDR"];
twentytwentyone
(fons verd) des de l'admin panel del wordpress.$ sudo vi /var/lib/docker/volumes/scaled-wp_wordpress/_data/wp-content/themes/twentytwentyone/header.php
wp_body_open()
:echo "IP Address: ".$_SERVER["SERVER_ADDR"];