Ynov Docker Lab 2020
Le but de cet examen est de tester vos connaissances sur les concepts que nous avons vu autour de docker et la containérisation.
Vous avez 2 heures pour réaliser l’examen.
La correction est réalisée via une procédure automatique. Aussi soyez rigoureux sur le respect des consignes et le nommage des différents objets que vous manipulerez tout au long de l’examen.
Quelques remarques générales:
- L’ensemble de l’examen doit se faire sur la machine docker. La machine operator n’est là que pour faire rebond.
- L’utilisateur de la machine docker est “docker”. Il est sudoer et vous pouvez installer tous les outils nécessaires que vous souhaitez.
- Sauf contre indication dans l’énoncer de l’exercice tous les container devront :
- Être détaché du prompt.
- Être mappé sur un port aléatoire.
- Ne pas être détruit en cas de stop.
- Les répertoires sont à créer dans le $HOME de l’utilisateur docker.
- Le container est une debian 10, le répertoire par défault de nginx est le suivant
/usr/share/nginx/html. - Au sein du container le fichier
indexs’appellera toujoursindex.html.
Bon courage
Vérification des pré-requis
- Connectez-vous à la machine operator
ssh VOTRE_LOGIN@85.158.8.48 -p 443
- Depuis la machine operator connectez-vous à votre machine docker
ssh docker@VOTRE_LOGIN-docker-vm
- Créer un répertoire
exo0qui contient un fichier nomméinit.txtdans lequel vous écrivez la date du jour ainsi que votre nom prénom.
mkdir -p ~/exo0 && touch ~/exo0/init.txt && echo "2020-10-22 Maffait Michael" > ~/exo0/init.txt
- Créer un répertoire
ressourcesqui contiendra l’ensemble des ressources nécessaire à l’examen.
mkdir -p ~/ressources
Installation de Docker
Exercice 1
- Installer Docker pour une CentOs en vous appuyant sur la documentation officiel disponible à l’adresse Doc Docker.
- L’utilisateur docker à les droits suffisant pour effectuer toutes installations sur la mahcine docker.
- Ne vous occupez pas des Optionnal
- Démarrer et Activer le service
- L’utilisateur docker est déjà dans le groupe docker (pas besoin de sudo pour vos commande docker).
- Contrôler l’installation en affichant la version de docker et en effectuant un run de l’image
hello-world. - Créer un répertoire
exo1qui contient un fichier nommédocker.txtdans lequel vous écrivez la version de docker.
mkdir -p ~/exo1 && touch ~/exo1/docker.txt && docker --version > ~/exo1/docker.txt
Récupération d’images
Exercice 2
- Depuis le hub de docker récupérer la version de l’image Nginx 1.19.3.
- Créer un répertoire
exo2qui contient un fichier nomménginx.txtdans lequel vous écrivez l’id de l’image nginx (préfixé par sha:256).
Création d’un container
Exercice 3
- Créer un container depuis l’image nginx 1.19.3:
- Le container se nomme
ynov-nginx-exo345. - Il suit les règles cités plus haut :up:.
- Le container se nomme
- Récupérer le port associé.
- Faite un test local pour vérifier la bonne exécution de votre container.
curl http://localhost:VOTRE_PORT
- Créer un répertoire
exo3qui contient un fichier nommérun.txtdans lequel vous écrivez la commande que vous avez exécutée pour instancier le container. - Dans le répertoire
exo3créer fichier nomméport.txtdans lequel vous écrivez le port Host mappé par votre container.
Modification d’un container
Exercice 4
- Modifier le contenu de la page container
ynov-nginx-exo345.- Utiliser le fichier index.html présent à l’adrsse suivante index-copy.html.
- Faite un test local pour vérifier la bonne modification de votre contenu.
- Créer un répertoire
exo4qui contient un fichier nommécopy.txtdans lequel vous écrivez la commande que vous avez exécutée pour modifier le contenu du container.
Création d’une image
Exercice 5
- Depuis le container
ynov-nginx-exo345, créé une image que vous allez nommerynov-nginx-commit. - Tagguer la en version 1.0
- Créer un container depuis l’image
ynov-nginx-commit1.0:- Le container se nomme
ynov-nginx-exo5. - Il suit les règles cités plus haut :up:.
- Le container se nomme
- Récupérer le port associé.
- Modifier le contenu de la page container
ynov-nginx-exo5- Utiliser le fichier index.html présent à l’adresse suivante index-image.html
- Faite un test local pour vérifier la bonne exécution de votre container.
- Créer un répertoire
exo5qui contient un fichier nommécommit.txtdans lequel vous écrivez la commande que vous avez exécutée pour créer l’image
Exercice 6
- Créer un répertoire
exo6qui contient un fichier nomméDockerfile. - Le fichier Dockerfile doit:
- Construire une image depuis l’image nginx 1.19.3.
- Copier le fichier suivant index-dockerfile dans le repertoire
/usr/share/nginx/html.
- Construiser l’image et nommé la
ynov-nginx-dockerfile. - Taggué là en 1.0
- Créer un container depuis l’image ynov-nginx-dockerfile 1.0:
- Le container se nomme
ynov-nginx-exo6. - Il suit les règles cités plus haut :up:.
- Le container se nomme
- Récupérer le port associé.
- Faite un test local pour vérifier la bonne exécution de votre container.
- Dans le répertoire
exo6créer fichier nommédockerfile.txtdans lequel vous écrivez la commande que vous avez exécutée pour instancier le containerynov-nginx-exo6.
Volumes
Exercice 7
- Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-exo7. - Il suit les règles cités plus haut :up:.
- Vous allez devoir utiliser un bind-mount pour monter le dossier suivant ressources/html à la place du répertoire
/usr/share/nginx/html - Le répertoire doit être présent sur la machine docker dans le dossier ressources.
- Le container se nomme
- Récupérer le port associé.
- Faite un test local pour vérifier la bonne exécution de votre container.
- Modifier dans le répertoire
~/ressources/html/le fichierindex.htmlafin d’afficher la date du jour après Exo7 Volumes Bind Mount. - Re-faite un test local pour vérifier la bonne exécution de votre container et l’affichage de votre page.
- Créer un répertoire
exo7qui contient un fichier nommébind.txtdans lequel vous écrivez la commande que vous avez exécuter pour bind mounter le volume dans le container.
Exercice 8
- Créer un volume nommé
ynov-nginx-volumes. - Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-exo81. - Il suit les règles cités plus haut :up:.
- Vous allez devoir y monter le volume
ynov-nginx-volumesdans le repertoire/usr/share/nginx/html
- Le container se nomme
- Copier le fichier index-volume dans le volume
ynov-nginx-volumes. - Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-exo82. - Vous allez devoir y monter le volume
ynov-nginx-volumesdans le repertoire/usr/share/nginx/html
- Le container se nomme
- Récupérer les ports associés à vos container.
- Vérifier que vos deux container affiche bien la même page.
- Créer un répertoire
exo8qui contient un fichier nommémount.txtdans lequel vous écrivez la commande que vous avez exécuter pour monter le volume dans les deux containers.
Network
Exercice 9
- Créer un network de type bridge nommé
ynov-nginx-networkavec comme option--opt com.docker.network.driver.mtu=1450. - Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-exo91. - Il suit les règles cités plus haut :up:.
- Le hostname du container doit être
ynov-nginx-exo91. - Vous allez devoir l’associer au netwok
ynov-nginx-network.
- Le container se nomme
- Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-exo92. - Il suit les règles cités plus haut :up:.
- Le hostname du container doit être
ynov-nginx-exo92. - Vous allez devoir l’associer au netwok
ynov-nginx-network.
- Le container se nomme
- Vérifier que vos deux container affiche bien la même page.
- Exécuter un shell interactif dans le container
ynov-nginx-exo91afin de pouvoir faire un ping (package iputils-ping) sur le le containerynov-nginx-exo92 - Créer un répertoire
exo9qui contient un fichier nomméping.txtdans lequel vous écrivez la commande que vous avez exécutée pour pouvoir vous connectez ainsi que la commande ping et plus si nécessaire.
All In One
Exercice 10
- Créer un network de type bridge nommé
ynov-nginx-bg. - Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-blue. - Il suit les règles cités plus haut :up:.
- Le hostname du container doit être
ynov-nginx-blue. - Vous allez devoir l’associer au netwok
ynov-nginx-bg. - Au moment du run ajouter le label “-l traefik.frontend.rule=”Host:bg.docker.local”
- Le container se nomme
- Créer un container depuis l’image
ynov-nginx-dockerfile:- Le container se nomme
ynov-nginx-green. - Il suit les règles cités plus haut :up:.
- Le hostname du container doit être
ynov-nginx-green. - Vous allez devoir l’associer au netwok
ynov-nginx-bg. - Au moment du run ajouter le label “-l traefik.frontend.rule=”Host:bg.docker.local”
- Le container se nomme
- Lancer un container traefik qui publie le port 80.
docker run -d -p 80:80 -p 8080:8080 --network ynov-nginx-bg -l traefik.frontend.rule="Host:traefik.docker.local" --name traefik -h traefik -v /var/run/docker.sock:/var/run/docker.sock traefik:v1.7 --api --docker
- Modifier le fichier index.html de
ynov-nginx-bluepour affichier Welcome to blue - Modifier le fichier index.html de
ynov-nginx-greenpour affichier Welcome to Green - Fait un test avec curl en passant l’entete HOST
curl -H "Host: bg.docker.local" localhost:80
- Arrété le container qui porte le fichier que vous avez vu avec la commande
curl. - Fait un test avec
curlen passant l’entete HOST
curl -H "Host: bg.docker.local" localhost:80
- Créer un répertoire
exo10qui contient un fichier nommébg.txtdans lequel vous notez vos observation.