====== Docker multicontainer ======= Prerequisits: conèixer [[Docker]] {{tag> docker multicontainer #FpInfor #Ciber #CiberMp03 #Ceti #CetiMp03}} ===== 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 ====== * Ajuda de docker: Escriure "docker" o "docker COMMAND --help" * Documentació de Docker - https://docs.docker.com/ * Tutorial de Docker - https://www.tutorialspoint.com/docker/index.htm * Imatges de Wordpress - https://hub.docker.com/_/wordpress * Imatges de MySQL - https://hub.docker.com/_/mariadb ====== 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 * La Base de dades de WordPress al directori del contenidor "mi-sql" /var/lib/mysql es guarda al volum "wp-db". * El directori amb contingut web estàtic i dinàmic, potser directoris de "upload" on els usuaris pugen dades contingut tot al directori /var/www/html del contenidor "mi-wordpress", es guarda al volum "web". * Podríem també guardar en un altre volum els directoris i fitxers de configuració del contenidor que necessitem que persisteixin després de la mort dels contenidors. 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: * O bé de https://hub.docker.com/_/wordpress/ buscant example stack.yml) * O bé a partir de l'exemple https://docs.docker.com/samples/wordpress/ * O bé a la web https://www.composerize.com/ que converteix les comandes docker run a un fitxer docker-compose. 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: * La BD es guardi en un volum. * També els directoris on mediawiki guarda les dades que els usuaris pugen al servidor. * Configura amb el teu nom i pàgina d'inici el **Mediawiki** (Que es vegi clarament que és el teu lloc particular, posa alguna imatge pròpia). \\ \\ 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.