Le concept de docker repose sur l’idée de conteneur qui est considéré a l’époque comme une révolution dans le domaine du transport.
Le conteneur permit de transporter la marchandise d’une façon facile et efficace vers sa destination .
Donc avant de rentrer sur les détails techniques de docker, il faut d’abord comprendre ce qu’est un conteneur (ou précisément la virtualisation par conteneur ) dans le contexte informatique (Linux Container).
C’est quoi un conteneur Linux !
L’idée de conteneur est apparue avec LXC (Linux Containers), un système qui assure une virtualisation au niveau de l’environnement d’exécution et non la virtualisation d’une machine.
Dans un environnement virtualisé classique, une ou plusieurs machines virtuelles s’exécutent sur une machine physique à l’aide d’un hyperviseur comme Xen, Hyper-V, etc.
Les conteneurs, en revanche, s’exécutent dans l’espace utilisateur au-dessus du noyau des systèmes d’exploitation. Il peut être appelé virtualisation au niveau du système d’exploitation. Chaque conteneur aura son espace utilisateur isolé et vous pouvez exécuter plusieurs conteneurs sur un hôte, chacun ayant son propre espace utilisateur. Cela signifie que vous pouvez exécuter différents systèmes Linux (conteneurs) sur un seul hôte. Par exemple, vous pouvez exécuter un RedHat et un conteneur Fedora sur un serveur Ubuntu. Le serveur Ubuntu peut être une machine virtuelle ou un hôte physique.
Les conteneurs sont isolés dans un hôte à l’aide des deux fonctionnalités du noyau Linux appelées namespaces et control groups .
namespaces
parmi les espaces de noms (namespaces) sous Linux on a :
- PID : qui est responsable de l’isolement des processus (Process ID).
- NET : qui gère les interfaces réseau (Networking).
- MNT : qui est responsable de la gestion des points de montage du système de fichiers (Mount).
- IPC : qui gère l’accès aux ressources IPC ( InterProcess Communication).
- UTS : qui isole les identifiants du noyau et de la version. (Unix Timesharing System).
En utilisant ces espaces de noms, un conteneur peut avoir ses propres interfaces réseau, adresse IP, etc. Chaque conteneur aura son propre namespace et les processus en cours d’exécution dans ce namespace n’auront aucun privilège en dehors de son namespace.
control groups
Les ressources utilisées par un conteneur sont gérées par des groupes de contrôle Linux. Vous pouvez décider de la quantité de ressources CPU et mémoire qu’un conteneur doit utiliser à l’aide des groupes de contrôle Linux.
Pourquoi Docker ?
Le conteneur n’est pas un nouveau concept. Google utilise sa propre technologie de conteneur dans son infrastructure depuis des années. Les zones Solaris, les prisons (jails) BSD et LXC sont les quelques technologies de conteneurisation Unix qui existent depuis assez longtemps.
Par la suite , nous découvrirons Docker et verrons pourquoi Docker est très utile et différent des autres technologies.
Enfin, qu’est-ce que Docker?
Docker est un projet open source populaire basé sur des conteneurs Linux. Docker est écrit en go et développé par Docker Inc.. Docker est essentiellement un moteur de conteneur qui utilise les fonctionnalités du noyau Linux pour créer des conteneurs au-dessus d’un système d’exploitation et automatise le déploiement d’applications.
Il fournit un environnement léger pour exécuter votre code d’application. Docker dispose d’un flux de travail efficace pour déplacer votre application de votre ordinateur portable autant que développeur, vers l’environnement de test et la production (l’ami des DevOps!). Il est très rapide et peut fonctionner sur un hôte avec un noyau Linux compatible.
Docker utilise le système de fichiers UnionFS pour son stockage. À chaque fois que des modifications sont apportées à un conteneur, seules les modifications seront écrites sur le disque à l’aide de la technique copy-on-write. De plus, la création d’un conteneur prend moins d’une seconde.
Comment ça marche ?
Docker a une architecture client-serveur. Le serveur – Docker Daemon – est responsable de toutes les actions liées aux conteneurs. Le démon reçoit les requêtes des clients Docker via la ligne de commande ou via une API REST. Un client Docker peut être sur le même hôte que le serveur ou être présent sur un autre hôte.
Les images sont les éléments de base de Docker. Les conteneurs sont construits à partir d’images. Les images peuvent être configurées avec des applications et utilisées comme modèle pour créer des conteneurs.
Docker Registry est un dépôt d’images Docker. À l’aide du registre Docker, vous pouvez créer et partager des images Docker. Docker Inc. fournit un service d’enregistrement hébergé appelé Docker Hub. Il vous permet de déposer et de télécharger des images à partir d’un emplacement central, Docker hub agit comme git.