Installation de Docker sur Linux et configuration de base
L'installation de Docker représente votre premier pas vers la pratique et la mise en place de vos premiers conteneurs. Ce chapitre présente les différentes méthodes d'installation de Docker et explique comment installer Docker sur Linux. Nous verrons aussi comment déployer notre premier conteneur et effectuer la configuration de base de Docker (Docker Hub, réseau, volume, etc.).
Notes préalables :
- Avant d'installer Docker, il est important de considérer que si vous utilisez
ufwetfirewalldpour gérer les règles de filtrage du trafic réseau, les conteneurs exposés sur Docker contournent ces règles. - Les règles de filtrage créées avec
nftablesne sont pas supportées par Docker, il est préférable d'utiliseriptables-nftetiptables-legacy.
Sommaire
- Méthodes d'installation de Docker sur Linux
- Installation de Docker sur Linux
- Vérification de l'installation de Docker
- Docker en mode rootless
- Création de compte sur Docker Hub
- Configuration du fichier daemon.json
- Configuration réseau avec Docker
- Gestion des volumes
- Activer Docker au démarrage de la machine
- Sécurité de base de Docker
Méthodes d'installation de Docker sur Linux
Plusieurs possibilités existent quant à la méthode d'installation de Docker Engine - le moteur principal de Docker - à savoir :
- Utiliser Docker Desktop pour Linux (plus simple)
- Configurer et installer Docker via le dépôt apt
- Installer (et mettre à jour) manuellement avec un fichier de package deb
- Utiliser un script pratique (mis à disposition par Docker)
Dans le cadre de ce cours, nous expliquerons comment installer Docker sur Debian via apt. Nous supposons être root (ou que notre utilisateur possède les droits sudo pour apt).
Installation de Docker sur Linux
Commençons par mettre à jour les paquets et installer les prérequis :
apt update && apt install ca-certificates curl gnupg lsb-release

Création d'un répertoire pour les clés de sécurité APT :
install -m 0755 -d /etc/apt/keyrings
Nous ajoutons la clé GPG officielle de Docker :
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Ensuite, nous devons modifier les permissions pour la clé GPG de Docker :
chmod a+r /etc/apt/keyrings/docker.gpg
Puis nous ajoutons le repository Docker aux sources d'APT :
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Après ajout du repository Docker, nous actualisons les sources :
apt update
Note : si vous utilisez une distribution dérivée de Debian, vous devrez peut-être remplacer la partie de cette commande qui est censée imprimer le nom de code de la version :
(. /etc/os-release && echo "$VERSION_CODENAME")
Il vous faudra remplacer cette partie par le nom de la version Debian correspondante, telle que Bookworm.
Au final, nous terminons par installer Docker et ses composants essentiels :
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Nous pouvons tester l'installation de Docker avec un conteneur de démonstration :
docker run hello-world

Une fois Docker installé sur un système Linux, il est essentiel de configurer correctement l'environnement pour garantir un fonctionnement fluide et sécurisé.
Vérification de l'installation de Docker
Avant de commencer la configuration, assurons-nous que Docker est installé et opérationnel :
docker –version
docker info

Ces commandes confirment que Docker est actif et fournissent des informations sur sa configuration actuelle.
Docker en mode rootless
Par défaut, Docker nécessite des droits root ou l'utilisation de sudo pour exécuter des commandes. En effet, le démon Docker s’exécute avec des privilèges élevés afin de pouvoir gérer les conteneurs, les réseaux et les volumes du système. Pour éviter d’utiliser systématiquement sudo, il est possible d’ajouter un utilisateur au groupe docker, ce qui lui d'utiliser Docker sans élévation de privilèges.
Ajoutons notre utilisateur dédié (jeremy) au groupe docker :
usermod -aG docker jeremy
Une déconnexion et une reconnexion de session sont nécessaires pour que les changements prennent effet.
Testons l'accès sans sudo :
docker run hello-world

Création de compte sur Docker Hub
Le formulaire de création de compte est accessible sur : hub.docker.com/signup. Complétez le formulaire en indiquant un e-mail et en choisissant un nom d'utilisateur et un mot de passe. L'alternative consiste à utiliser un compte Google ou GitHub.

Il est nécessaire de s'authentifier pour avoir accès à la liste des images publiques depuis cette page : hub.docker.com/search?type=image&image_filter=official

Nous pouvons aussi nous authentifier auprès du Docker Hub avec la commande docker login, puis entrer notre mot de passe :

Configuration du fichier daemon.json
Docker utilise un fichier de configuration JSON pour gérer ses paramètres. Ce fichier est situé dans /etc/docker/daemon.json. Voyons un exemple de configuration courante.
Créons (ou modifions) le fichier suivant :
nano /etc/docker/daemon.json
Ajoutons le contenu suivant pour définir des paramètres de base :
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker",
"storage-driver": "overlay2",
"iptables": true,
"live-restore": true
}
Explications :
log-driver: définit le pilote de journaux utilisé (ici, JSON).log-opts: limite la taille des journaux pour éviter qu'ils ne saturent le disque.data-root: spécifie l'emplacement des fichiers Docker.storage-driver: définit le pilote de stockage utilisé pour les couches des conteneurs.iptables: autorise Docker à gérer automatiquement les règles de pare-feu.live-restore: maintient les conteneurs en cours d'exécution même si le daemon Docker redémarre.

Nous devons redémarrer le service Docker pour appliquer ces modifications :
systemctl restart docker
Configuration réseau avec Docker
Docker propose plusieurs types de réseaux permettant d’adapter l’architecture en fonction des besoins. Le réseau bridge est utilisé par défaut, mais d’autres modes sont disponibles.
Le réseau Bridge
Le mode de réseau Bridge est utilisé par défaut par Docker, si aucun autre mode n'est spécifié lors de la création du réseau. Docker crée un réseau interne isolé sur l’hôte avec un NAT vers l’extérieur.
Créons un réseau bridge personnalisé intitulé tout simplement mon_reseau_personnalise :
docker network create \
--driver bridge \
--subnet=192.168.1.0/24 \
mon_reseau_personnalise
Nous pouvons vérifier le réseau créé :
docker network ls
Le réseau Host
Dans ce mode, le conteneur partage directement le réseau de l’hôte, sans isolation :
- Pas d’adresse IP Docker distincte
- Pas de NAT
- Accès direct aux ports de l’hôte
Par exemple :
docker run --rm --network host nginx
Explications :
--rm: supprime automatiquement le conteneur dès qu'il s'arrête,--network host: le conteneur utilise directement le réseau de l’hôte, sans isolation réseau Docker,nginx: image utilisée pour lancer un serveur web
Le réseau none
Ce mode désactive complètement le réseau du conteneur :
- Pas d’adresse IP
- Pas de route
- Pas de communication réseau
Par exemple :
docker run --rm --network none alpine
Le réseau macvlan
Ce mode permet au conteneur d’apparaître comme une machine physique à part entière sur le réseau local, avec sa propre adresse MAC. Très utile quand un service doit être visible directement sur le LAN.
Créons un réseau de ce type nommé mon_macvlan lié à l'interface eth0:
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
mon_macvlan
Le réseau ipvlan
Proche de macvlan, mais sans créer de nouvelle adresse MAC par conteneur. Deux modes existent :
- ipvlan L2 : similaire à macvlan
- ipvlan L3 : routage entre sous-réseaux
Comment différencier ces modes à la création ?
Si nous souhaitons créer un réseau ipvlan L2 :
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
-o parent=eth0 \
--ipvlan-mode=l2 \
mon_ipvlan_l2
De cette façon, le conteneur est dans le même réseau que l’hôte.
En revanche, si nous souhaitons le mode L3 :
docker network create -d ipvlan \
--subnet=10.10.0.0/24 \
-o parent=eth0 \
--ipvlan-mode=l3 \
mon_ipvlan_l3
L’isolation est ainsi plus forte.
Réseau overlay
Utilisé dans Docker Swarm pour permettre la communication entre des conteneurs situés sur plusieurs hôtes différents. Pour le créer, nous utilisons :
docker network create -d overlay mon_overlay
D'une manière générale, l'option --network permet de spécifier le nom du réseau sur lequel connecter un conteur.
docker run --rm --network mon_reseau_personnalise alpine ping -c 4 192.168.1.1
Gestion des volumes
Les volumes permettent de persister les données des conteneurs au-delà de leur cycle de vie. Ils sont nécessaires si on souhaite faire persister les données, car, rappelons-le, un conteneur est stateless et supprime les données lorsqu'il est détruit.
Créons un volume :
docker volume create [nom_volume]
Il faut remplacer nom_volume par le nom de volume que nous souhaitons créer. Par exemple :
docker volume create itconnect-volume
Listons les volumes existants :
docker volume ls
Exemple d'utilisation de volume avec un conteneur :
docker run --rm -it -v itconnect:/data alpine sh

Que signifient les différents paramètres avec docker run ?
--rm: supprime automatiquement le conteneur une fois que vous quittez.-it: active le mode interactif (-i) avec un terminal pseudo-TTY (-t), ce qui vous permet de taper des commandes directement.-v itconnect:/data: monte le volume nomméitconnect(que nous avons préalablement créé) sur le chemin/datadans le conteneur.alpine: utilise l'image Alpine comme base.sh: ouvre un shell à l'intérieur du conteneur pour exécuter des commandes.
Pour quitter le conteneur, tapez simplement exit. Le conteneur sera supprimé automatiquement grâce à l'option --rm.
Activer Docker au démarrage de la machine
Il est possible de prévoir que Docker soit exécuté au démarrage du système. Pour ce faire, nous utilisons la commande :
systemctl enable docker
Sécurité de base de Docker
Plusieurs recommandations simples mais importantes sont à retenir quant à la sécurité de base :
- Bloquer les accès non sécurisés : par défaut, Docker expose une API locale. Nous devons nous assurer qu'il n'est pas accessible à distance sans un pare-feu.
- Mettre à jour régulièrement : il est important de maintenir Docker et les images à jour pour corriger les failles de sécurité potentielles avec
docker pull. - Utiliser des images officielles et vérifiées : privilégier l'utilisation d'images provenant de sources de confiance, telles que les images officielles sur le Docker Hub.
Le prochain chapitre s'adresse à ceux qui veulent explorer l'utilisation de Docker sur Windows, ce qui vous donnera aussi l'occasion de découvrir Docker Desktop.
