From 5656b48eda9fa4e7e60bd3591f8068547df9b0d8 Mon Sep 17 00:00:00 2001 From: Fabrice Jammes Date: Sun, 7 Jul 2024 22:34:08 +0200 Subject: [PATCH] Update current feature --- content/1_Labs/docker.fr.md | 238 ++++++++++++++++-------------------- 1 file changed, 103 insertions(+), 135 deletions(-) diff --git a/content/1_Labs/docker.fr.md b/content/1_Labs/docker.fr.md index 70a14f8..3d749be 100644 --- a/content/1_Labs/docker.fr.md +++ b/content/1_Labs/docker.fr.md @@ -2,7 +2,7 @@ title: "Docker : l'essentiel" date: 2024-07-07T14:15:26+10:00 draft: false -weight: 0 +weight: 1 tags: ["docker", "container", "devops"] --- @@ -46,104 +46,90 @@ docker run -it -p 8080:80 ubuntu netcat -l -p 80 Créer un conteneur ubuntu qui exécute `netcat -l -p 80` et expose le port `808` sur l'hôte. -1. Remplacez `` par un numéro unique de votre choix (par exemple, 1) et exécutez la commande suivante pour lancer un conteneur Ubuntu avec Netcat : +1. Remplacez `` par un numéro unique (par exemple 1 si vous êtes `k8s1`) et lancer un conteneur Ubuntu avec Netcat : -{{%expand "Solution" %}} -```bash -docker run --name "netcat" -d -p 808:80 -- \ -ubuntu sh -c "apt-get update && apt-get -y install netcat && echo 'Run netcat' && netcat -l -p 80" -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + docker run --name "netcat" -d -p 808:80 -- \ + ubuntu sh -c "apt-get update && apt-get -y install netcat && echo 'Run netcat' && netcat -l -p 80" + ``` + {{% /expand%}} 2. Vérifiez que le conteneur est en cours d'exécution : -{{%expand "Solution" %}} -```bash -docker ps -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + docker ps + ``` + {{% /expand%}} 3. Testez la connexion depuis l'hôte en utilisant Netcat : -{{%expand "Solution" %}} -```bash -netcat localhost 808 -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + netcat localhost 808 + ``` + {{% /expand%}} 4. Si la connexion est établie, tapez quelque chose dans le terminal et vous devriez voir la même chose dans le conteneur (vous pouvez vérifier les logs avec `docker logs netcat`). -## Démarrer un conteneur nommé “mariadbtest” et exécuter une instance mariadb +{{% notice note %}} +Utilisez `CtrlẐ` puis `bg` pour mettre la commande `netcat` précédente en tâche de fond. +{{% \notice %}} -{{%expand "Solution" %}} -```bash -# Démarrer un conteneur nommé “mariadbtest” et exécuter une instance mariadb - -# mariadbtest est le nom que nous voulons attribuer au conteneur. Si nous ne spécifions pas de nom, un identifiant sera généré automatiquement. -docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb -# Facultativement, après le nom de l'image, nous pouvons spécifier des options pour mysqld. Par exemple : -docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED - -# lister les conteneurs en cours d'exécution -docker ps -``` -{{% /expand%}} +## Cas pratique -### Exercice +### Partie 1: Exécuter un conteneur 1. Démarrez un conteneur nommé `mariadbtest` avec le mot de passe root pour MySQL défini sur `mypass` : -{{%expand "Solution" %}} -```bash -docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb + ``` + {{% /expand%}} 2. Vérifiez que le conteneur est en cours d'exécution : -{{%expand "Solution" %}} -```bash -docker ps -``` -{{% /expand%}} - -3. Optionnellement, vous pouvez ajouter des options pour `mysqld` comme indiqué dans l'exemple ci-dessus. - -## Installer vim dans le conteneur mariadbtest + {{%expand "Solution" %}} + ```bash + docker ps + ``` + {{% /expand%}} -{{%expand "Solution" %}} -```bash -# Accéder au conteneur via bash, avec accès root -docker exec -it mariadbtest bash +3. Optionnellement, vous pouvez ajouter des options pour `mysqld` comme indiqué dans l'exemple ci-dessous. -# Installer des logiciels à l'intérieur du conteneur -apt-get update && apt-get install vim -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED + ``` + {{% /expand%}} -### Exercice +### Partie 2: Accéder interactivement à un conteneur 1. Accédez au conteneur `mariadbtest` via bash : -{{%expand "Solution" %}} -```bash -docker exec -it mariadbtest bash -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + docker exec -it mariadbtest bash + ``` + {{% /expand%}} 2. Mettez à jour les paquets et installez vim : -{{%expand "Solution" %}} -```bash -apt-get update && apt-get install vim -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + apt-get update && apt-get install vim + ``` + {{% /expand%}} 3. Vérifiez que vim est installé en tapant `vim` dans le terminal du conteneur. -## Créer un Dockerfile pour exécuter un serveur web python +### Partie 3: Créer une image de conteneur pour exécuter un serveur web python + +#### Création de l'image Allez dans le répertoire de l'exercice : @@ -151,106 +137,88 @@ Allez dans le répertoire de l'exercice : cd k8s-school/labs/0_docker/webserver ``` -### Exercice - Trouvez la commande pour construire le conteneur et le taguer avec le label `webserver`. 1. Construisez le conteneur et taguez-le avec le label `webserver` (remplacez `` par un numéro unique) : -{{%expand "Solution" %}} -```bash -docker build --tag=webserver . -``` -{{% /expand%}} - -Utilisez l'exemple de `Dockerfile` dans le répertoire actuel et mettez-le à jour. - -{{%expand "Solution" %}} -```bash -# Utiliser ubuntu comme image de base, elle sera téléchargée automatiquement -FROM ubuntu:latest -LABEL org.opencontainers.image.authors "fabrice.jammes@gmail.com" - -# Mettre à jour et installer les dépendances système -RUN apt-get update && apt-get install -y python3 -RUN mkdir -p /home/www -WORKDIR /home/www -# Les commandes ci-dessous seront toutes exécutées dans WORKDIR - -# Lancer la commande ci-dessous au démarrage du conteneur -# Elle servira les fichiers situés là où elle a été lancée -# donc /home/www -CMD python3 /home/src/hello.py - -# Ajouter un fichier local à l'intérieur du conteneur -# le code peut également être récupéré à partir d'un dépôt git -COPY index.html /home/www/index.html - -# Cette commande est la dernière, donc si hello.py est modifié -# seule cette couche du conteneur sera modifiée. -COPY hello.py /home/src/hello.py -``` -{{% /expand%}} - -### Exercice - -1. Créez un `Dockerfile` basé sur l'exemple ci-dessus. -2. Construisez l'image Docker et taguez-la : + {{%expand "Solution" %}} + ```bash + docker build --tag=webserver . + ``` + {{% /expand%}} -{{%expand "Solution" %}} -```bash -docker build --tag=webserver . -``` -{{% /expand%}} +2. Utilisez l'exemple de `Dockerfile` dans le répertoire actuel et mettez-le à jour petit à petit en démarrant par le haut du fichier. -## Lancer le conteneur en tant que daemon et publier le port 8000 sur l'hôte + {{%expand "Solution" %}} + ```bash + # Utiliser ubuntu comme image de base, elle sera téléchargée automatiquement + FROM ubuntu:latest + LABEL org.opencontainers.image.authors "fabrice.jammes@gmail.com" + + # Mettre à jour et installer les dépendances système + RUN apt-get update && apt-get install -y python3 + RUN mkdir -p /home/www + WORKDIR /home/www + # Les commandes ci-dessous seront toutes exécutées dans WORKDIR + + # Lancer la commande ci-dessous au démarrage du conteneur + # Elle servira les fichiers situés là où elle a été lancée + # donc /home/www + CMD python3 /home/src/hello.py + + # Ajouter un fichier local à l'intérieur du conteneur + # le code peut également être récupéré à partir d'un dépôt git + COPY index.html /home/www/index.html + + # Cette commande est la dernière, donc si hello.py est modifié + # seule cette couche du conteneur sera modifiée. + COPY hello.py /home/src/hello.py + ``` + {{% /expand%}} -Vérifiez le fichier python à l'intérieur du conteneur pour trouver le port à exporter. +#### Exécution du conteneur -### Exercice +Analyser le programme python `hello.py` à l'intérieur du conteneur pour trouver le port à exporter. -1. Lancer le conteneur en tant que daemon et publier le port 8000 sur l'hôte : +1. Lancer le conteneur en tant que daemon et publier le port 800 sur l'hôte : -{{%expand "Solution" %}} -```bash -docker run -d --name mywww -t -p 8000:8000 webserver -``` -{{% /expand%}} + {{%expand "Solution" %}} + ```bash + docker run -d --name k8s_www -t -p 800:8000 webserver + ``` + {{% /expand%}} 2. Vérifiez que le conteneur est en cours d'exécution et accédez au site web -{{%expand "Solution" %}} + {{%expand "Solution" %}} ```bash docker ps curl http://localhost:8080 ``` -{{% /expand%}} + {{% /expand%}} 3. Supprimez le conteneur : -{{%expand "Solution" %}} + {{%expand "Solution" %}} ```bash - docker rm -f mywww + docker rm -f k8s_www ``` -{{% /expand%}} - -## Lancer le conteneur en tant que daemon et publier le port 8000 sur l'hôte, et utiliser le fichier html stocké sur la machine hôte + {{% /expand%}} -### Exercice - -1. Lancez le conteneur en tant que daemon, publiez le port 8000 sur l'hôte, et utilisez le fichier html stocké sur la machine hôte : +4. Lancez le conteneur en tant que daemon, publiez le port 800 sur l'hôte, et utilisez le fichier html stocké sur la machine hôte : {{%expand "Solution" %}} ```bash - docker run --name my_webserver -d -p 8000:8000 -v $PWD/www:/home/www webserver + docker run --name k8s_www_data -d -p 800:8000 -v $PWD/www:/home/www webserver ``` {{% /expand%}} -2. Vérifiez que le conteneur est en cours d'exécution et que le fichier HTML est servi correctement. +5. Vérifiez que le conteneur est en cours d'exécution et que le fichier HTML est servi correctement. {{%expand "Solution" %}} ```bash + # Editer le fichier $PWD/www/index.html docker ps - curl http://localhost:8080 + curl http://localhost:808 ``` {{% /expand%}}