- Développement : Créé par Solomon Hykes et présenté en mars 2013, Docker est rapidement devenu une référence dans le monde du développement logiciel.
- Fonction : Docker permet de créer et de gérer des conteneurs, qui sont des environnements isolés pour exécuter des applications.
- Basé sur le noyau Linux : Docker utilise le noyau Linux pour isoler des applications dans des conteneurs, offrant ainsi un degré d'isolation similaire à des machines virtuelles, mais avec une empreinte système beaucoup plus réduite.
- Utilisation des LXC : Les Linux Containers (LXC) sont une fonctionnalité du noyau Linux qui permet la création de conteneurs pour l'exécution d'applications dans des environnements isolés.
Chroot
- Introduction : Depuis 1979, le programme chroot ("changer de racine") est utilisé dans les systèmes UNIX pour changer la racine d’un processus, ce qui était une manière primitive d'isoler un processus en lui donnant l'impression de fonctionner dans un système de fichiers distinct.
Jail
- Évolution avec Jail : FreeBSD a introduit en 2002 la notion de jail pour renforcer l'isolation offerte par chroot, permettant une séparation réelle et sécurisée des processus. Jail améliore la notion de chroot en isolant un processus non seulement du système de fichiers mais aussi d'autres processus et actions système.
Namespaces
- Introduction des Namespaces : Linux a adopté et popularisé le concept des namespaces en 2002, qui ont été intégrés dans le noyau Linux 3.8 en 2013. Les namespaces permettent d'isoler des groupes de processus dans différents contextes (comme des PID, réseau, montages de système de fichiers, utilisateurs, noms d'hôte, et communication inter-processus), offrant ainsi une base pour la création de conteneurs.
Les 6 Types de Namespaces
- PID Namespace : Isolation des identifiants de processus et de la visibilité des processus.
- Network Namespace : Isolation des interfaces réseau, des règles de pare-feu, et des tables de routage.
- Mount Namespace : Isolation et personnalisation des vues du système de fichiers.
- User Namespace : Isolation des identifiants d'utilisateurs entre les namespaces.
- UTS Namespace : Permet de changer le nom d'hôte au sein du conteneur.
- IPC Namespace : Isolation de la communication inter-processus.
Cgroups
- Gestion des Ressources avec Cgroups : Développés par Google en 2005, les cgroups (groupes de contrôle) permettent de limiter et d'isoler l'utilisation des ressources matérielles par les conteneurs, comme la mémoire, le disque, le réseau, les appels système, et le CPU.
- Isolation : Chaque conteneur fonctionne indépendamment des autres, ce qui réduit les conflits entre applications et simplifie la gestion des dépendances.
- Légèreté : Par rapport aux machines virtuelles traditionnelles, les conteneurs Docker nécessitent moins de ressources, car ils partagent le noyau de l'hôte et nécessitent moins de surcharge.
- Portabilité : Les conteneurs peuvent être facilement déplacés entre différents environnements Linux, facilitant le développement, les tests et la mise en production.
- Simplicité d'utilisation : Docker simplifie le déploiement d'applications en encapsulant les applications et leurs dépendances dans des conteneurs.
