Taula de continguts

Docker multicontainer

Prerequisits: conèixer Docker

, , , , , ,

REPTE: Projectes Docker Multicontenidor

ATENCIÓ: Els noms dels equips hosts al VirtualBox, el nom del sistema quan instal·leu, els noms de l'usuari, equip, etc. han de ser el vostre per a que a les captures es pugui veure.
Convertiu el fitxer Markdown en pdf abans de lliurar la pràctica, i afegiu també la carpeta d'imatges amb el document .md en un sol .zip
Teniu l'exercici a fer al final d'aquest enunciat. Llegiu primer tot el document abans de començar la pràctica.

Referències i ajuda

Objectius

L'objectiu d'aquesta pràctica és començar a treballar amb múltiples contenidors interconnectats amb serveis estàndard.

Introducció

Podem iniciar múltiples contenidors amb imatges ja preparades al DockerHub. Per exemple

 sudo docker search apache
 sudo docker search wordpress
 sudo docker search mysql

Podem muntar un contenidor amb un servidor Web i una aplicació Web (WordPress) i un altre contenidor amb un servidor de BD (MariaDB).

Seguint les instruccions de la pàgina d'ajuda de la imatge de Wordpress (https://hub.docker.com/_/wordpress) i de MySQL (https://hub.docker.com/_/mariadb), caldrà iniciar primer el contenidor de la BD i després el del WP (en aquest ordre ja que l'aplicació Wordpress necessita que la BD estigui engegada abans):

 $ docker run --name mi-sql --network xarxa_dades -d -e MYSQL_DATABASE=wp-db -e MYSQL_USER=wp-user -e MYSQL_PASSWORD=pass -e MYSQL_RANDOM_ROOT_PASSWORD='1' -v wp-db:/var/lib/mysql mariadb:latest
 $ docker run --name mi-wordpress --network xarxa_dades -d -e WORDPRESS_DB_HOST=mi-sql -v web:/var/www/html -e WORDPRESS_DB_NAME=wp-db -e WORDPRESS_DB_USER=wp-user -e WORDPRESS_DB_PASSWORD=pass -p 8081:80 wordpress:latest

Observa que hem posat volums per als directoris dels contenidors servidors on es guarden dades que es modifiquen quan funcionen els serveis

Per accedir al Wordpress creat, com ja sabeu apuntem al host local (físic) posant al navegador http://localhost:8080

Podem veure els logs dels contenidors, per si alguna cosa falla, fent:

 sudo docker logs -f mi-sql
 sudo docker logs -f mi-wordpress

Podem accedir a la BD des dels propis contenidors (des del contenidor del WP o localment al contenidor de la BD) executant un client de mysql amb la comanda exec de Docker:

 // des del contenidor que te Wordpress (cal accés remot i per això especifiquem
 // el host a la comanda mycli amb -h)
 sudo docker exec -ti mi-wordpress bash
 # apt update
 # apt install mycli
 # mycli -hmi-sql --user=exampleuser --password exampledb
 // o bé des del contenidor que té la base de dades
 sudo docker exec -ti mi-sql mysql --user=exampleuser --password exampledb

Podem crear un fitxer docker-compose per a engegar els serveis automàticament i en seqüència ordenada. D'això se'n diu «orquestrar». Cal instal·lar primer el docker-compose

https://docs.docker.com/compose/install/

El fitxer docker-compose el podeu crear a partir de:

Es guardarà en un fitxer docker-compose.yml (en format yaml). Observeu que cada paràmetre del docker run té les seves directives equivalents:

 version: '3.3'
 services:
     mariadb:
         image: 'mariadb:latest'
         container_name: mi-sql
         restart: always
         environment:
             - MYSQL_DATABASE=wp-db
             - MYSQL_USER=wp-user
             - MYSQL_PASSWORD=pass
             - MYSQL_RANDOM_ROOT_PASSWORD=1
         volumes:
             - 'wp-db:/var/lib/mysql'
     wordpress:
         depends_on:
             - mariadb
         image: 'wordpress:latest'
         container_name: mi-wordpress
         restart: always
         environment:
             - WORDPRESS_DB_HOST=mi-sql
             - WORDPRESS_DB_NAME=wp-db
             - WORDPRESS_DB_USER=wp-user
             - WORDPRESS_DB_PASSWORD=pass
         volumes:
             - 'web:/var/www/html'
         ports:
             - '8081:80'
 volumes:
    wp-db:
    web:

Al directori on s'ha creat el fitxer docker-compose.yml executem «docker-compose up». Quan volem aturar-ho piquem CTRL+C.

Un cop arrencada la aplicació multicontainer amb docker-compose, ja podrem accedir al WordPress a

http://localhost:8081

Repte: Projecte multicontenidor Mediawiki i Joomla (enunciat).

ATENCIÓ: Vigileu per que no és el mateix arrencar el contenidor per a fer la instal·lació que arrencar el contenidor quan ja hi ha dades prèvies que s'ha d'utilitzar. Assegureu-vos bé que quan torneu a engegar contenidors, s'enllacen a les dades que havia abans. Si no, cada vegada que inicieu contenidors, s'iniciaria la instal·lació de mediawiki o Joomla.

Mediawiki

NOTA: Recordeu que heu de posar el vostre nom a tots els objectes que creeu i configureu a les ordres docker run i el docker-compose. També cal que es vegi el vostre nom en el Mediawiki i Joomla que creeu, així com plantilles i fotografies per personalitzar la web.

1. Arrenca dos contenidors per poder tenir un lloc mediawiki (busca a DockerHub), de manera que:



2. Anem a comprovar que la persistència és correcta. Mata (kill) i destrueix (rm) els dos contenidors amb els que heu configurat el mediawiki. Mostra que no estan. Crea dos contenidors nous de manera que s'aprofitin les dades que hi ha a la BD de dades creada anteriorment i el fitxer de configuració del mediawiki (posa'l en un volum extra). Ha de veure's el que ja havíeu fet.

3. Crea un fitxer docker-compose per a iniciar i aturar els serveis d'una sola tacada. Agafa la informació de les pàgines d'ajuda dels contenidors de Wordpress, Mediwiki i Joomla.