Sommaire
- Présentation
- 1) Préparation de l’environnement
- 2) Installation de Docker
- 3) Démarrer un Container (Méthode Détaillée)
- 4) Démarrer un Container (Méthode Rapide)
- 5) Gérer le cycle de vie d’un Container
- 6) Persistance des modifications dans un Container
- 7) Redirection de répertoires dans un Container
- 8) Redirection des ports réseaux d’un Container
Présentation
Dans ce tutoriel, nous allons installer Docker pour ensuite créer et administrer des Containers.
Ce tutoriel est prévu pour Debian 11, Ubuntu Server 22.04.
Vous pouvez installer docker sur un VPS pour profiter pleinement des ressources de votre Serveur Privé Virtuel.
1) Préparation de l’environnement
Avant d’installer Docker et de créer nos Containers, il faut s’assurer que le système est correctement configuré.
Important : Nous supposons que le paquet sudo est installé sur le système (apt install sudo
)
1.1) Configuration de l’heure
1 2 3 |
sudo timedatectl set-timezone Europe/Paris sudo hwclock -w timedatectl status |
Vous pouvez obtenir la liste des fuseaux horaire acceptés en utilisant la commande : timedatectl list-timezones
1.2) Désinstallation des anciennes versions de Docker
1 |
sudo apt remove docker docker-engine docker.io containerd runc |
1.3) Mise à jour du dépôt et des paquets
1 |
sudo apt -y update && sudo apt -y upgrade |
2) Installation de Docker
2.1) Installation des prérequis pour Docker
1 2 3 4 5 |
sudo apt install -y \ ca-certificates \ curl \ gnupg \ lsb-release |
2.2) Ajout du nouveau dépôt officiel de Docker
1 2 3 4 5 6 7 8 |
# Add Docker’s official GPG key sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Set up the repository echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
2.3) Mise à jour du dépôt
1 |
sudo apt update -y |
2.4) Installation de la dernière version de Docker
1 |
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin |
2.5) Ajout de l’utilisateur courant au groupe docker
1 2 3 |
sudo usermod -aG docker $USER # Application du changement de groupe newgrp docker |
L’utilisateur courant pourra ainsi lancer les commandes docker sans spécifier la commande sudo.
$USER est une variable qui contient le nom de l’utilisateur courant.
Remplacer $USER par un nom d’utilisateur pour ajouter un utilisateur bien précis.
Attention : Ne rajouter que des utilisateurs de confiance dans ce groupe. (Plus d’infos : docker-daemon-attack-surface).
Source : Installation de Docker sur docs.docker.com
3) Démarrer un Container (Méthode Détaillée)
Nous utiliserons l’image hello-world pour nos exemples.
Pour démarrer un autre container à partir d’une autre image :
Il suffit de remplacer hello-container par le nom du container et hello-world par le nom de l’image.
3.1) Récupération d’une image
1 |
docker pull hello-world |
3.2) Création d’un container
1 |
docker create --name hello-container hello-world |
3.3) Démarrage d’un container
1 |
docker start -a hello-container |
-a : Afficher les sorties du container
3.4) Suppression d’un container
1 |
docker rm hello-container |
4) Démarrer un Container (Méthode Rapide)
Le plus souvent, le démarrage d’un container se fait par la commande docker run.
Cette commande permet de regrouper les actions pull, create et start.
Si l’image n’est pas disponible sur le système, elle sera téléchargée automatique (docker pull).
Le container sera créé (docker create) puis démarré automatiquement (docker start).
4.1) Démarrage d’un container avec docker run
1 |
docker run --name hello-container hello-world |
4.2) Suppression du container
1 2 |
docker stop hello-container docker rm hello-container |
5) Gérer le cycle de vie d’un Container
Nous utiliserons l’image nginx pour nos exemples.
Pour un autre container à partir d’une autre image :
Il suffit de remplacer nginx-container par le nom du container et nginx par le nom de l’image.
5.1) Démarrage d’un container
1 |
docker run -d --name nginx-container nginx |
-d : –detach, Démarrer le container en tâche de fond.
5.2) Mettre en pause un container
1 |
docker pause nginx-container |
5.3) Reprendre un container
1 |
docker unpause nginx-container |
5.4) Redémarrer un container
1 |
docker restart nginx-container |
5.5) Stopper un container
1 |
docker stop nginx-container |
docker kill
: Pour un arrêt immédiat
5.6) Suppression d’un container
1 |
docker rm nginx-container |
docker rm -f
: Pour forcer la suppression (même si le container n’est pas arrêté)
6) Persistance des modifications dans un Container
Par défaut, les modifications apportées au container sont conservées en cas d’arrêt/redémarrage de ce dernier.
Cependant, les modifications ne seront pas conservées en cas de suppression du container.
Pour démontrer la persistance des modifications dans un container, nous mettrons à disposition une page web grâce à l’image nginx.
Nous modifierons la page web par défaut.
Nous constaterons ensuite la persistance ou non des modifications après redémarrage et suppression du container.
6.1) Démarrage d’un container nginx
1 |
docker run -d --name nginx-container nginx |
-d : –detach, Démarrer le container en tâche de fond
6.2) Rentrer/Se Connecter dans un Container
1 |
docker exec -it nginx-container bash |
-it : -i -t, –interactive –tty, Vulgairement, avoir accès au container via une console
Noter la différence du prompt une fois dans le container.
6.3) Modification de la page web du site
1 |
echo "Bonjour, Vous êtes sur Jj World" > /usr/share/nginx/html/index.html |
6.4) Test de la page web
1 |
curl http://127.0.0.1 |
6.5) Sortie du container
1 |
exit |
6.6) Persistance après redémarrage du container
Arrêter puis Redémarrer le container docker stop nginx-container
puis docker start nginx-container
(ou simplement docker restart nginx-container
).
Refaire les étapes 6.2, 6.4 et 6.5 (Ne pas refaire l’étape 6.3).
Le résultat n’a pas changé.
6.7) Non-Persistance après suppression/recréation du container
Supprimer puis Recréer le container docker rm -f nginx-container
puis docker run -d --name nginx-container nginx
Refaire les étapes 6.2, 6.4 et 6.5.
Le résultat n’est plus le même. Les modifications effectuées précédemment ont été perdues.
Même si le container porte le même nom, il s’agit d’une toute nouvelle instance créée à partir de l’image nginx.
6.8) Suppression du container
1 |
docker rm -f nginx-container |
7) Redirection de répertoires dans un Container
Il est possible de conserver les modifications après la suppression d’un container en utilisant des Volumes.
7.1) Création d’un répertoire sur l’hôte Docker
1 |
mkdir -p $PWD/demo/jjworld |
7.2) Création de la page web
1 |
echo "Bonjour, Vous êtes sur Jj World" > $PWD/demo/jjworld/index.html |
7.3) Création d’un container nginx
1 |
docker run -d --name nginx-container -v $PWD/demo/jjworld/:/usr/share/nginx/html/:ro nginx |
-v /cheminSurHote:/cheminDansContainer : Mappage de répertoire
7.4) Rentrer/Se Connecter dans un Container
1 |
docker exec -it nginx-container bash |
7.5) Test de la page web
1 |
curl http://127.0.0.1 |
7.6) Sortir du container
1 |
exit |
7.7) Persistance après suppression/recréation du container
Supprimer le container docker rm -f nginx-container
Refaire les étapes 7.3 à 7.6.
Le résultat n’a pas changé.
8) Redirection des ports réseaux d’un Container
Il est possible de créer des redirections de ports réseaux afin de mettre à disposition plusieurs services sur un même hôte Docker.
Dans ce paragraphe, nous mettrons à disposition 2 pages web affichant respectivement « Bonjour, Vous êtes sur Jj World 1″ et « Bonjour, Vous êtes sur Jj World 2″ l’une sur le port 8081 et l’autre sur le port 8082.
8.1) Création d’un répertoire et de la page web du site Jj World 1
1 2 3 4 5 |
# Création d'un répertoire mkdir -p $PWD/demo/jjworld1 # Création d'une page web echo "Bonjour, Vous êtes sur Jj World 1" > $PWD/demo/jjworld1/index.html |
8.2) Démarrage du site Jj World 1
1 |
docker run -d --name jjworld1 -p 8081:80 -v $PWD/demo/jjworld1/:/usr/share/nginx/html/:ro nginx |
-d : –detach, Démarrer le container en tâche de fond
–name : Nom du Container
-p : Redirection du port 8081 de l’hôte Docker vers le port 80 du Container
-v : Redirection du répertoire /demo/jjworld1/ de l’hôte Docker vers le répertoire /usr/share/nginx/html/ du Container. :ro pour que le container n’y accède qu’en lecture seul.
8.3) Idem pour le site Jj World 2
1 2 3 |
mkdir -p $PWD/demo/jjworld2 echo "Bonjour, Vous êtes sur Jj World 2" > $PWD/demo/jjworld2/index.html docker run --name jjworld2 -p 8082:80 -v $PWD/demo/jjworld2/:/usr/share/nginx/html:ro -d nginx |
8.4) Accéder au site Jj World 1
1 |
curl http://127.0.0.1:8081 |
8.5) Accéder au site Jj World 2
1 |
curl http://127.0.0.1:8082 |
8.6) Suppression des containers
1 2 |
docker rm -f jjworld1 docker rm -f jjworld2 |
Voilà ! C’est terminé !
Vous pouvez enfin vous amuser avec des containers grâce à Docker.
Il ne reste plus qu’à :
- Créer et administrer vos propres containers
- Expérimenter la redirection de ports et de répertoires
- Utiliser la section commentaires pour me faire part de vos remarques ou problèmes rencontrés.
- Visiter la page de la documentation officielle pour aller encore plus loin.
En savoir plus sur Jj World
Subscribe to get the latest posts sent to your email.
Laisser un commentaire