Virtualisation du réseau
2 MP-RT SSR & TRT
Dr. Sofiene Dridi
TP3 Docker
Objectifs du TP :
- Comprendre les concepts fondamentaux de Docker et son architecture.
- Apprendre à manipuler des images, des conteneurs, des volumes, et des réseaux Docker.
- Savoir créer et orchestrer des applications multi-conteneurs avec Docker Compose.
Prérequis :
- Connaissance de base de Linux / ligne de commande
- Compréhension des différences entre les conteneurs et les machines virtuelles
- Notions de base en réseaux
Etape 1 : Préparation de l’environnement et Installation du moteur Docker sous Linux
- Dans cette partie, on va installer le moteur Docker sur la machine hôte (il est recommandé de
consulter la documentation Docker : [Link]
ce/ubuntu/).
- On va commencer par ajouter le repository officiel de Docker sur notre machine. Cette étape va
nous permettre de profiter des dernières mises à jour stables directement depuis le repository
Docker.
- La commande à lancer :
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL [Link] -o
/etc/apt/keyrings/[Link]
sudo chmod a+r /etc/apt/keyrings/[Link]
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-
by=/etc/apt/keyrings/[Link]]
[Link] \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/[Link].d/[Link] > /dev/null
- Mettre à jour l'index du package apt et installer la dernière version de Docker Engine et de
containerd
sudo apt-get install docker-ce docker-ce-cli [Link] docker-
buildx-plugin docker-compose-plugin
1
Etape 2 : Vérifier et tester Docker
- Une fois l’installation finie, l'étape suivante est de vérifier que Docker est correctement installé en
vérifiant d'abord la version du moteur :
# docker --version
- Pour finir les tests de vérifications d'installation, on va lancer la commande suivante :
# docker run hello-world
Etape 3 : Lancer des conteneurs
- Les premières options à exploiter sont : -t, -i et -d
- Elles permettent de choisir le “mode” du conteneur. Notamment entre le fait d’être exécuté au
premier plan ou en arrière-plan.
- Pour essayer quelque chose de plus ambitieux, on peut exécuter un conteneur Ubuntu avec :
# docker run –it ubuntu bash
- On va maintenant télécharger un container plus intéressant que hello-world : le container officiel
ubuntu.
- Aller sur le hub docker [Link] en cliquant sur Explore en haut à gauche et
trouver les images officielles d’Ubuntu, debian, mysql, apache, etc.
# docker pull ubuntu
- On va lister les images disponibles :
# docker images
- Démarrer notre premier container ubuntu.
# docker run ubuntu
- Un container ne reste en vie que si un processus est actif. On peut lister les containers actifs avec
la commande docker ps. On peut aussi lister tous les containers, actifs ou inactifs avec docker ps
-a.
- On va maintenant rediriger l'entrée standard du container et ouvrir un pseudo-terminal,
o -t : Allouer un pseudo TTY (terminal virtuel)
o -i : Garder un STDIN ouvert (l'entrée standard plus précisément l'entrée clavier)
o -d : Exécuter le conteneur en arrière-plan et afficher l'ID du conteneur
- Dans ce cas, on a besoin d'une Tty (option -t) et du mode interactif (option -i) pour interagir avec
notre conteneur basé sur l'image Ubuntu. Essayer alors l'exécution de ces deux options, le tout
en exécutant le processus /bin/bash
# docker run -ti --name=ubuntu ubuntu /bin/bash
- Essayer la commande ls
- Pour quitter votre conteneur sans le détruire, utilisez le raccourci suivant : Ctrl + P + Q
- Arrêter le conteneur Ubuntu, puis lister les containers actifs
2
# docker stop ubuntu
- Redémarrer le de nouveau avec la commande start
- Pour supprimer notre conteneur, il faut d'abord l'identifier et par la suite avoir soit son id, soit
son nom. La commande permettant de lister les conteneurs disponibles sur votre machine est :
# docker container ls
ou
# docker ps
- Pour tuer notre conteneur :
# docker rm Ubuntu
- Rechercher sur le hub Docker une image Python 3.
- Télécharger et lancez un conteneur Python 3.
- Exécuter du code Python dans ce conteneur.
- Arrêter ce conteneur.
- Supprimer ce conteneur.
Etape 4 : Construire une image Docker
- Créer un fichier nommé Dockerfile basique pour un serveur web simple (NGINX ou Apache).
- Par convention, un Dockerfile ne prend jamais d'extension et commence par une majuscule.
FROM ubuntu:20.04
RUN apt update \
&& apt install -yf \
nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
- Construire l’image Docker (nommée mynginx ) à partir du Dockerfile :
# docker build -t mynginx .
- Note : le point à la fin de la commande permet de dire à Docker que le Dockerfile à créer se trouve
dans notre répertoire courant.
FROM pour définir l'image source
RUN pour exécuter des commandes dans votre conteneur
ADD pour ajouter des fichiers à votre conteneur
WORKDIR pour définir votre répertoire de travail
EXPOSE pour définir les ports d'écoute par défaut
VOLUME pour définir les volumes utilisables
CMD pour définir la commande par défaut lors de l'exécution de
vos conteneurs Docker
3
Etape 5 : Volumes Docker
- Objectif : Gérer les données persistantes à l'aide des volumes Docker.
- Un volume Docker est un mécanisme qui permet de stocker des données de manière persistante
en dehors des conteneurs, sur le système hôte. Contrairement aux conteneurs, qui sont
éphémères et perdent leurs données lorsqu'ils sont supprimés, un volume permet de conserver
les données même après l'arrêt ou la suppression d'un conteneur.
- Les volumes peuvent être partagés entre plusieurs conteneurs et sont utilisés pour sauvegarder
des fichiers ou des bases de données, garantissant ainsi la persistance des données dans des
environnements de production.
- Dans cette partie de TP, on va créer et monter des volumes.
- Créer un volume :
# docker volume create my_volume
- Vérifier que le volume est créé
# docker volume ls
- Exécuter un conteneur avec le volume attaché :
# docker run -d --name my_container -v my_volume:/data ubuntu
- Accéder au conteneur et créer un fichier dans le volume :
# docker exec my_container bash -c "echo 'Hello from the
volume!' > /data/[Link]"
ou
# docker exec -it my_container sh
# echo "Hello from Docker Volume!" > /data/[Link]
# exit
- Vérifier la création du fichier dans le volume :
# docker exec my_container ls /data
- Supprimer un volume :
# docker volume rm my-volume
Etape 6 : Réseaux dans Docker
- Docker utilise des réseaux pour permettre aux conteneurs de communiquer entre eux, soit sur le
même hôte, soit sur différents hôtes.
- Types de réseaux Docker :
o Bridge (Pont) : Réseau par défaut pour les conteneurs isolés.
o Host : Utilise directement le réseau de l'hôte sans isolation.
o None : Le conteneur n'a pas de réseau.
o Overlay : Utilisé pour la communication entre différents hôtes (ex. avec Docker Swarm).
- Lister les Réseaux Disponibles :
# docker network ls
- Inspecter le Réseau Bridge par défaut :
4
# docker network inspect bridge
Cette commande montre les détails du réseau bridge, y compris les conteneurs connectés et leur
configuration IP.
- Créer un Réseau Personnalisé (Type Bridge):
# docker network create --driver bridge mon_reseau
Ce réseau, appelé mon_reseau, est basé sur le pilote bridge et permet aux conteneurs de
communiquer entre eux en isolation.
- Lancer des Conteneurs sur le Réseau Personnalisé:
# docker run -d --name conteneur1 --network mon_reseau ubuntu
# docker run -d --name conteneur2 --network mon_reseau ubuntu
Ces conteneurs sont connectés au réseau mon_reseau et peuvent communiquer entre eux.
- Tester la Communication entre les deux Conteneurs :
# docker exec conteneur1 ping -c 3 conteneur2
Etape 7 : Comment nettoyer le système Docker
Docker fournit une commande unique qui nettoiera toutes les ressources - images, conteneurs,
volumes et réseaux - qui sont en suspens (non associées à un conteneur) :
# docker system prune
Etape 8 : Docker Compose
- Orchestrer des applications multi-conteneurs à l'aide de Docker Compose.
- Écrire un fichier [Link] pour définir une application multi-services (par exemple,
un serveur web avec une base de données).
- Lancer l'application et ajuster la mise à l'échelle des services.
Exemple de [Link] :
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
Commandes :
docker-compose up
docker-compose ps
docker-compose down
5
Etape 8 : Application
Il s’agit d’une application Docker simple pour déployer un serveur Web Nginx, axé sur la
compréhension des volumes et des réseaux Docker. Dans cette application, vous êtes demandé de
configurer un conteneur Nginx, un réseau personnalisé et un volume pour stocker le contenu Web ( et
la configuration.
Voila un simple fichier html :
<!-- html/[Link] -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<title>Dockerized Nginx</title>
</head>
<body>
<h1>Hello, Docker!</h1>
<p>This is a sample page served by Nginx in a Docker
container.</p>
</body>
</html>