Déploiement d'applications dans des conteneurs avec Docker

Le fonctionnement de Docker

Introduction

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 :

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

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 :

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 :

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 :

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éé.

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 :

Libchan gère les options de transport suivantes :