Rappelons d’abord ce que sont les machines virtuelles, VM en anglais (Virtual Machines) :

Les VM sont des PC virtuels qui tournent sur une machine réelle, sur laquelle est installée une couche de virtualisation. Chaque PC virtuel dispose de son système d’exploitation (Windows, Linux, …) sur lequel tournent des applications.
C’est une mécanique très puissante et très utilisée dans l’informatique professionnelle mais aussi très gourmande en ressources. C’est pourquoi est apparue la technologie docker, qui n’est pas de la virtualisation mais de la conteneurisation.

Contrairement aux VM, les conteneurs docker n’embarquent pas de système d’exploitation, ils utilisent le système d’exploitation de la machine physique (Linux). Les deux conséquences majeures sont que les ressources nécessaires pour faire tourner des conteneurs sont bien plus faibles que celles nécessaires pour faire tourner des VM, et donc les conteneurs sont bien plus rapides à se lancer que les VM et surtout on peut en mettre beaucoup plus sur une machine donnée. La deuxième conséquence majeure est que seules les applications Linux peuvent tourner dans un conteneur.
L’utilisation des conteneurs docker a beaucoup d’avantages :
Premièrement, tout comme pour les VM, les conteneurs tournent dans des espaces mémoire étanches les uns par rapport aux autres.
Secundo, il est très facile de lancer les services, ou les arrêter, en une commande.
Tertio, il est très facile d’installer ou de retirer un logiciel sans casser le reste de la machine.
Et cerise sur le gâteau, docker tourne très bien dans une VM.
Il n’est pas question dans ce tutoriel de faire un cours sur les conteneurs ou docker. Il y a des bouquins entiers là-dessus. Nous pouvons recommander par exemple celui-ci :
Nous allons juste apprendre ce qu’il y à savoir pour auto-héberger des logiciels performants sur notre serveur Linux.
Alors qu’il y a-t-il à savoir sur docker ?
Voici les quelques points fondamentaux à savoir sur docker.
- Docker repose sur un moteur, le docker engine, qui est capable de lancer des instances d’images docker. Les instances d’images lancées sont appelées « conteneurs »
- Les images sont créées par des passionnés ou par les éditeurs de logiciels eux-mêmes et sont mises en ligne sur le docker hub (https://hub.docker.com)
- Un service docker se configure dans un fichier texte au format YML et nommé docker-compose.yml
Les conteneurs docker n’existent que sous Linux car ils utilisent des fonctionnalités qui n’existent que dans le noyau Linux, à savoir :
- Les Namespaces (espaces de noms) : ils assurent l’isolation des ressources entre les conteneurs et avec l’hôte. Chaque conteneur a sa propre vue du système. Docker utilise plusieurs types de namespaces :
- Les Cgroups (Control Groups) : ils assurent le contrôle des ressources (CPU, mémoire, débit disque, etc.). Ils permettent de limiter, de prioriser et de mesurer l’utilisation des ressources de chaque conteneur, empêchant qu’un seul conteneur ne monopolise les ressources de l’hôte .
- Les Union File Systems (UnionFS) : ils permettent la création d’images en couches.
Dit autrement, les namespaces isolent, les cgroups limitent, et l’UnionFS structure les images de manière efficace.
Docker sur Mac et Windows
L’affirmation que docker n’existe que sous Linux peut surprendre puisque le lecteur aura peut-être déjà vu tourner docker sous Windows ou sur Mac. En réalité, dans les deux cas il y a toujours du Linux en dessous.
Sous Windows, le produit docker desktop utilise soit le noyau Linux présent dans WSL2 (Windows Subsystem for Linux), la couche Linux embarquée dans Windows, soit une VM Linux.
Sur Mac c’est pareil, docker desktop utilise une VM Linux légère en arrière plan.
Docker vs Podman
Podman est une technologie de conteneurisation concurrente de docker. Elle a été créée par Red hat et se caractérise par le fait que, contrairement à docker, elle ne nécessite pas de droit administrateur (root) pour fonctionner. Elle est donc plus sécurisée dans un sens.
Installation et configuration de docker sous Linux (Ubuntu)
Dans un shell taper les commandes :
sudo apt update
sudo apt install docker.io docker-compose-v2 util-linux-extra
Une fois docker installé, il ajouter l’utilisateur qu’on utilise et sous le nom duquel on est connecté au groupe docker, en tapant :
sudo usermod -aG docker nom_utilisateur
Le fait de faire partie du groupe docker permettra de ne pas avoir à taper sudo devant chaque commande docker. Pour appliquer les changements dans la session actuelle :
newgrp docker
Et c’est tout. C’est installé. La commande suivante doit fonctionner sans avoir besoin de sudo :
docker compose version
Maintenant que docker est installé, vous pouvez faire tourner n’importe quelle application dockerisée, comme par exemple la lecture de bandes dessinées en ligne.

