

On compare souvent les conteneurs aux machines virtuelles. Mais ce sont de grosses simplifications parce qu’on en a un usage similaire : isoler des programmes dans des “contextes”. Une chose essentielle à retenir sur la différence technique : les conteneurs utilisent les mécanismes internes du _kernel de l’OS Linux_ tandis que les VM tentent de communiquer avec l’OS (quel qu’il soit) pour directement avoir accès au matériel de l’ordinateur.
Docker Desktop utilise une machine virtuelle Linux pour exécuter les conteneurs sur Windows/macOS, car les conteneurs reposent sur des mécanismes du noyau Linux.

Machine virtuelle - VM : une abstraction complète pour simuler des machines
Conteneur : une isolation à l’échelle de l’application et il ne cherche pas à émuler un système entier.
Les conteneurs mettent en œuvre des concepts d’isolation des processus de Unix où “tout est fichier”.
Dans Unix, le principe du “tout est fichier” fait que toutes les ressources du système, les processus, les périphériques, les sockets, la mémoire sont présentés comme des fichiers.
Comme toutes les ressources du système sont représentées sous forme de fichiers, le noyau peut décider quels fichiers un processus voit.
En contrôlant cette visibilité, Unix peut créer des environnements isolés où chaque processus perçoit une version limitée du système.
Les conteneurs modernes s’appuient sur les mécanismes d’isolation qui fournir à chaque processus une vision réduite, indépendante et reproductible du système.
Voici quelques-uns de ces concepts d’isolation repris de Unix:
1. chroot
Implémenté principalement par le programme chroot [change root : changer de racine], permet l’isolation du système de fichiers
2. Les namespaces (espaces de noms)
Les namespaces sont des mécanismes du noyau Linux qui créent des environnements isolés pour les processus
Ceux-ci correspondent à des compartiments nécessaires dans l’architecture Linux pour isoler des processus, il y 6 types de namespaces :
3. Les cgroups : derniers mécanismes pour un contrôle complet des ressources (CPU, mémoire, I/O)
Après, il reste à s’occuper de limiter la capacité à agir sur les ressources matérielles disponibles :
Alors que les namespaces masquent ce que le processus peut voir, les cgroups restreignent ce que le processus peut consommer.
1. Isolation sans virtualisation lourde
Grâce à l’idée que tout est fichier, on peut montrer à un processus une version limitée du système :
Un conteneur n’est pas une VM : c’est un ensemble de processus isolés qui croient être seuls et fonctionner dans leur propre environnement.
2. Reproductibilité et portabilité
Comme tout est fichier :
Même environnement partout, même comportement partout.
3. Sécurité et contrôle
L’isolation des fichiers permet :
On maîtrise précisément ce que chaque conteneur peut faire.
En résumé, le succès des conteneurs découle directement du design d’Unix, où chaque ressource (processus, réseau, disque) est représentée par un fichier. En isolant ce qu’un processus peut voir dans l’arborescence du système, on crée un environnement étanche et reproductible. Docker a modernisé ce concept en créant un format d’image standard, et Kubernetes s’occupe de déployer ces conteneurs sur des parcs de serveurs.
Docker permet de faire des “quasi-machines” avec des performances proches du natif.
L’exemple d’architecture le plus répandu dans l’industrie est le cluster Kubernetes déployé sur des Machines virtuelles (VM). Et l’architecture logicielle est en conteneur géré par Kubernetes.
Kubernetes peut fonctionner sur des serveurs bare‑metal, mais dans la majorité des environnements professionnels, il est déployé sur des machines virtuelles pour des raisons de gestion, de sécurité et de flexibilité.
| Critère | Virtualisation (VMs) | Conteneurisation |
|---|---|---|
| Isolation | OS complet isolé | Processus isolé, noyau partagé |
| Taille | Plusieurs Go | Quelques Mo à centaines de Mo |
| Démarrage | Minutes | Secondes |
| Ressources | Élevées (RAM, CPU dédiés) | Légères (partage des ressources) |
| Portabilité | Dépends de l’hyperviseur | Très portable (image OCI standard) |
| Cas d’usage | Multi-OS, isolation forte | Microservices, CI/CD, cloud-native |
isoler les modules applicatifs.
gérer les dépendances en les embarquant dans le conteneur.
se baser sur l'immutabilité : la configuration d’un conteneur n’est pas faite pour être modifiée après sa création.
avoir un cycle de vie court -> logique DevOps du “bétail vs. animal de compagnie”
uniformisation face aux divers langages de programmation, configurations et briques logicielles
installation sans accroc et automatisation beaucoup plus facile
permet de simplifier l'intégration continue, la livraison continue et le déploiement continu (CICD)
rapproche le monde du développement des opérations (tout le monde utilise la même technologie) (DEVOPS)
Permets l’adoption plus large de la logique DevOps (notamment le concept d’infrastructure as code)
En 2008, démarre le projet LXC qui cherche à rassembler les concepts d’isolation de processus de Linux :
Originellement, Docker était basé sur LXC. Il a depuis développé son propre assemblage de ces 3 mécanismes.
En 2013, Docker commence à proposer une meilleure finition et une interface simple qui facilite l’utilisation des conteneurs LXC.
Puis il propose aussi son cloud, le Docker Hub pour faciliter la gestion d’images toutes faites de conteneurs.
Au fur et à mesure, Docker abandonne le code de LXC (mais continue d’utiliser le chroot, les cgroups et namespaces).
Le code de base de Docker (notamment runC) est open source : l'Open Container Initiative vise à standardiser et rendre robuste l’utilisation de containers.
Docker est la technologie ultra-dominante sur le marché de la conteneurisation
LXC existe toujours et est très agréable à utiliser, notamment avec LXD (développé par Canonical, l’entreprise derrière Ubuntu) et Proxmox.
Apache Mesos : un logiciel de gestion de cluster qui permet de se passer de Docker, mais propose quand même un support pour les conteneurs OCI (Docker) depuis 2016.
Podman : une alternative à Docker qui utilise la même syntaxe que Docker pour faire tourner des conteneurs OCI (Docker) qui proposent un mode rootless et daemonless intéressants.(plus sécuritaire)
systemd-nspawn : technologie de conteneurs isolés proposée par systemd