Ceci est une ancienne révision du document !
Table des matières
Version : 2020.02 - Consulter le Change Log en fin de module.
Dernière mise-à-jour : 2020/03/03 12:52
DOF104 - Docker par la Pratique
Cette unité contient trois LABs :
- LAB #8 - Lancer Nagios dans un container,
- LAB #9 - Lancer Wordpress dans un container,
- LAB #10 - Gestion d'une Architecture de Microservices.
LAB #8 - Lancer Nagios dans un container
Créez le répertoire /root/nagios et placez-vous dedans :
root@debian9:~# mkdir nagios root@debian9:~# cd nagios root@debian9:~/nagios#
Créez le fichier Dockerfile suivant :
root@debian9:~/nagios# vi Dockerfile root@debian9:~/nagios# cat Dockerfile FROM ubuntu:14.04 RUN apt-get update && \ apt-get -y install wget && \ wget https://raw.github.com/learning-nagios/nagios-install/master/install.sh && \ sh install.sh EXPOSE 80 ADD entrypoint.sh /entrypoint.sh CMD ["sh", "/entrypoint.sh"]
Créez ensuite le fichier entrypoint.sh :
root@debian9:~/nagios# vi entrypoint.sh root@debian9:~/nagios# cat entrypoint.sh #!/bin/sh # capture stop signals from Docker trap stop_all 1 2 3 4 5 6 15 stop_all() { echo "Stopping services..." /etc/init.d/nagios stop apachectl stop } start_all() { echo "Starting services..." apachectl start /etc/init.d/nagios start } # start services and wait indefinitely start_all sleep 10000d
Créez maintenant l'image :
root@debian9:~/nagios# docker build --tag automated_nagios_image .
Une fois l'image construite, créez un conteneur ainsi :
root@debian9:~/nagios# docker run -p 8080:80 automated_nagios_image
Vérifiez que votre conteneur fonctionne :
root@debian9:~/nagios# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23d6feb6e799 automated_nagios_image "sh /entrypoint.sh" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp peaceful_zhukovsky ...
Ouvrez une session en mode graphique dans la machine virtuelle Debian 8 et lancez le navigateur web. Saisissez l'adresse suivante :
http://localhost:8080/nagios
Vous devez obtenir la boîte de dialogue d'authentification. Connectez-vous avec le compte nagiosadmin / nagiosadmin.
LAB #9 - Lancer Wordpress dans un container
Créez le répertoire ~/wordpress et placez-vous dedans :
root@debian9:~# mkdir ~/wordpress && cd ~/wordpress
Créez un conteneur dénommé wordpressdb à partir de l'image mariadb:latest :
root@debian9:~/wordpress# docker run -e MYSQL_ROOT_PASSWORD=fenestros -e MYSQL_DATABASE=wordpress --name wordpressdb -v "$PWD/database":/var/lib/mysql -d mariadb:latest Unable to find image 'mariadb:latest' locally latest: Pulling from library/mariadb f2b6b4884fc8: Pull complete 26d8bdca4f3e: Pull complete 74f09e820cce: Pull complete 5390f1fe4554: Pull complete 3d3f1706a741: Pull complete 2942f66426ea: Pull complete 97ee11d39c75: Pull complete 590c46ef722b: Pull complete 32eb4b9666e5: Pull complete fc883f98a064: Pull complete bb8bee61bc1e: Pull complete Digest: sha256:6135f5b851e7fe263dcf0edf3480cdab1ab28c4287e867c5d83fbe967412ea14 Status: Downloaded newer image for mariadb:latest 67831dacf002bdc21dc79b0e8483f538235d00ddd2e8aae175ef3ebf189ae14d
Vérifiez que le conteneur fonctionne :
root@debian9:~/wordpress# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 67831dacf002 mariadb:latest "docker-entrypoint.s…" About a minute ago Up 45 seconds 3306/tcp wordpressdb
Créez un conteneur appellé wordpress lié au conteneur wordpressdb :
root@debian9:~/wordpress# docker run -e WORDPRESS_DB_PASSWORD=fenestros --name wordpress --link wordpressdb:mysql -p 10.0.2.15:80:80 -v "$PWD/html":/var/www/html -d wordpress Unable to find image 'wordpress:latest' locally latest: Pulling from library/wordpress 2a72cbf407d6: Pull complete 273cd543cb15: Pull complete ec5ac8875de7: Pull complete 9106e19b56c1: Pull complete ee2f70ac7c7d: Pull complete 7257ad6985e8: Pull complete 18f5c2055da2: Pull complete 85293a6fdd80: Pull complete 9e797eeb0c14: Pull complete f16178842884: Pull complete 13899c06d3f8: Pull complete 70c27fe4c3c5: Pull complete d32c8ad2d9d7: Pull complete 07fe445494e6: Pull complete 63b8de7b32fe: Pull complete e4b721952e22: Pull complete d9ede6dd6f74: Pull complete 0af4f74bfd92: Pull complete e4e7c47b969f: Pull complete 69aff47f3112: Pull complete Digest: sha256:201d004f55669dd2c0884f00fc44145fb0da8cafa465bf22cbaacecaf81138d4 Status: Downloaded newer image for wordpress:latest 9eb2f7fbfbd25307ed2f463c7eb3bef40bfa556174e68750bb76b8d032546129
Vérifiez que le conteneur fonctionne :
root@debian9:~/wordpress# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9eb2f7fbfbd2 wordpress "docker-entrypoint.s…" 2 minutes ago Up About a minute 10.0.2.15:80->80/tcp wordpress 67831dacf002 mariadb:latest "docker-entrypoint.s…" 9 minutes ago Up 8 minutes 3306/tcp wordpressdb
Vérifiez que le Wordpress fonctionne :
root@debian9:~/wordpress# lynx --dump http://10.0.2.15 [1]WordPress Select a default language [English (United States)________] Continue References 1. https://wordpress.org/ root@debian9:~/wordpress# docker inspect wordpress | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.3", "IPAddress": "172.17.0.3", root@debian9:~/wordpress# lynx --dump http://172.17.0.3 [1]WordPress Select a default language [English (United States)________] Continue References 1. https://wordpress.org/
LAB #10 - Gestion d'une Architecture de Microservices
Vous allez mettre en place une application simple sous forme de microservices, développé par Docker et appelé demo-voting-app, :
Dans cette application le conteneur voting-app permet de voter pour des chats ou des chiens. Cette application tourne sous Python et fournit une interface HTML :
Lors de la vote, le résultat de celle-ci est stocké dans Redis dans une base de données en mémoire. Le résultat est ensuite passé au conteneur Worker qui tourne sous .NET et qui met à jour la base de données persistante dans le conteneur db qui tourne sous PostgreSQL.
L'application result-app qui tourne sous NodeJS lit ensuite la table dans la base de données PostgreSQL et affiche le résultat sous forme HTML :
Cette application peut être mise en place sous docker avec les commandes suivantes :
docker run -d --name=redis redis docker run -d --name=db postgres:9.4 docker run -d --name=vote -p 5000:80 --link redis:redis dockersamples/examplevotingapp_vote docker run -d --name=result -p 5001:80 --link db:db dockersamples/examplevotingapp_result docker run -d --name=worker --link db:db ---link redis:redis dockersamples/examplevotingapp_worker
Cette solution utilise un réseau de type Bridge. Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant Docker. Les conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieur. Pour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port.
ChangeLog
2020.01
Première version en 2020.
2020.02
- Added - LAB #10 - Gestion d'une Architecture de Microservices
<html>
Copyright © 2020 Hugh NORRIS
</html>