Le fonctionnement de Docker

Posted by IT NISRO 0 commentaires

    Docker permet de gérer et administrer des conteneurs basé sur un principe de template de conteneur. La gestion de template de conteneur est un atout majeur de docker qui propose une riche variété de conteneurs pré-existants mais également grâce à la personnalisation, selon l'envie des utilisateurs, de ces environnements isolés.

Docker utilise les services fournis par le kernel linux et se base sur LXC (LinuX Containers) qui est l’implémentation de référence de conteneurs dans Linux. Voici quelques services que Docker utilise :

  • cgroups
  • apparmor / selinux
  • namespaces

Je vais aussi parler des bibliothèques utilisées et mises à disposition par les développeurs de docker comme :

  • libcontainer
  • libswarm
  • libchan

LXC - Linux Containers                                                                            

    LXC est un ensemble d'outils permettant de contrôler les "Linux Containers", un mécanisme léger de système virtuel. LXC implémente des systèmes virtuels complets en partant de chroot, en ajoutant des mécanismes de gestion des ressources et d'isolation à l'infrastructure de gestion de processus existante de Linux. Les Linux Containers (lxc) implémentent :

  • La gestion de ressources via les "cgroups" ou "groupes de contrôle de processus" (implémentés via le système de fichiers /cgroup) ;
  • L'isolation de ressources via les nouveaux drapeaux (flags) de l'appel système clone(2) (capable de créer plusieurs types de nouveaux "namespaces" ou espaces de noms pour des choses telles que les PID et le routage réseau) ;
  • Plusieurs mécanismes d'isolation additionnels (tels que le drapeau -o newinstance du système de fichiers devpts).

Le fonctionnement de Docker

Le paquet LXC combine ces mécanismes du noyau Linux pour fournir un conteneur en espace utilisateur, un système virtuel léger avec une isolation et un contrôle des ressources complets pour une application ou un système entier. Les Linux Containers prennent une approche complètement différente des technologies de virtualisation des hyperviseurs, qui ont débuté en bootant des systèmes virtuels séparés sur du matériel émulé et ensuite ont essayé de réduire leur surcharge (overhead) via la paravirtualisation que nous avons pu voir avec les hyperviseurs de type 1 et des mécanismes similaires. Au lieu d'améliorer l'efficacité d'une isolation complète, LXC se base sur un mécanisme efficace (la gestion de processus de Linux) et a ajouté l'isolation, résultant en un mécanisme de virtualisation évolutif et portable à la façon de chroot, capable de supporter simultanément des milliers de systèmes émulés sur un seul serveur, tout en fournissant des possibilités de virtualisation légère aux routeurs et aux smartphones.

LXC est suffisamment petit pour gérer facilement un conteneur avec de simples lignes de commandes et assez complet pour être utilisé pour d'autres besoins.

Cgroups                                                                                                   

    Les cgroups - groupes de contrôle - ont pour but de contrôler les ressources systèmes utilisées par un ou plusieurs processus. Les processus sous contrôle sont affectés dans des groupes sur lesquels agissent des contrôleurs de ressources. Chaque contrôleur gère un type de ressources :

  • cpuset : allocation CPU (numéro CPU/core CPU).
  • cpuacct : consommation CPU (nombre de cycles).
  • memory : contrôle de la mémoire vive et de la mémoire swap.
  • devices : contrôle l’accès aux périphériques.
  • blkio : contrôle l’accès aux périphériques de type bloc (ex: disque dur).
  • net_cls : contrôle l’accès aux périphériques réseau.

AppArmor                                                                                                

AppArmor (Application Armor) est un module de sécurité crée à l'origine par Immunix. Depuis 2009, Canonical maintient le développement du code ( Novell s'en est occupé après Immunix et avant Canonical). Ce module de sécurité a été dans le noyau principal depuis sa version 2.6.36. AppArmor restreint les possibilités des programmes. AppArmor utilise les chemins de fichiers pour vérifier les restrictions de programme.

Security-Enhanced Linux                                                                         

    Security-Enhanced Linux (SELinux) est une alternative à AppArmor, crée par la National Security Agency (NSA). Il opère sur les outils de l'espace utilisateur du noyau. SELinux donne aux programmes (principalement les démons et les applications de serveur). SELinux peut aussi être utilisé pour contrôler les droits de l'utilisateur. Il n'utilise pas les chemins de fichier comme AppArmor, à la place SELinux utilise le système de fichiers pour noter les exécutables quand il vérifie leurs permissions. C'est ce qui fait que SELinux ne peut pas apporter de protection partout, c'est-à-dire tous les systèmes de fichiers, tandis que AppArmor le peut.

Namespaces                                                                                            

    Il existe différents types d'espace de noms (ou namespaces) chaque type d'espace de noms s'applique à une ressource spécifique. Et, chaque espace de noms crée des barrières entre les processus. Ces obstacles peuvent être à différents niveaux. Voici quelques types d'espace de noms que docker utilise :

  • pid : isole les processus (pid : Process ID).
  • net : permet la gestion des interfaces réseaux (net : networking)
  • ipc : gére les accès inter-processus (ipc : InterProcess Communication)
  • mnt : gestion des points de montage (mnt : mount)
  • uts : utilisé pour isoler le noyau et identificateurs de version (UTS : Unix Timesharing System)

Libcontainer                                                                                            

    Libcontainer est une bibliothèque écrite en Go pour la création de conteneurs avec des espaces de noms, les groupes de contrôle, les capacités et les contrôles d'accès du système de fichiers. Cette librairie a été développée pour faire le travail de lxc tout en simplifiant l'installation de docker. Elle vous permet de gérer le cycle de vie du conteneur, effectuer des opérations supplémentaires après que le container soit créé.


Docker

Libswarm                                                                                                 

    Décrit comme « une boite à outils pour créer des services réseaux », l'interêt de libswarm est de simplifier les déploiements d'applications Docker dans des configurations multi-nœuds, les nœuds pouvant tourner sur des distributions Linux différentes.

Libchan                                                                                                   

    Libchan est une bibliothèque réseau ultra-légère qui permet aux services réseaux de communiquer de la même manière que les goroutines communiquent en utilisant des canaux :

  • Simple message passing
  • Synchronisation pour la programmation parallèle
  • Nesting : les canaux peuvent envoyer (vers) des canaux
Libchan gère les options de transport suivantes :
  • In-memory Go channel
  • Unix socket
  • Raw TCP
  • TLS
  • HTTP2/SPDY
  • Websocket




0 commentaires:

Enregistrer un commentaire

Membres

Formulaire de contact

Nom

E-mail *

Message *