Archives par mot-clé : LXC

Docker : comprendre l’essentiel en 7 minutes

Dans cette vidéo, je vais vous parler de Docker!

  • Qu’est ce que Docker ?
  • Comment ça marche?
  • Et pourquoi est ce que l’on en parle autant?

 

C’est quoi la virtualisation par conteneurs ?

Avant de parler de Docker, il faut d’abord comprendre ce qu’est un conteneur

La virtualisation par conteneurs se base sur la virtualisation Linux LXC, pour Linux Containers. Il s’agit d’une méthode de cloisonnement au niveau de l’OS. Le principe est de faire tourner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau.

Ce qui veut dire que contrairement aux machines virtuelles traditionnelles, un conteneur n’inclut pas d’OS, puisqu’il s’appuie sur les fonctionnalités de l’OS de la machine hôte. Les conteneurs accèdent alors à l’OS hôte de manière totalement isolée les uns des autres.

Le conteneur virtualise l’environnement d’exécution (comme le processeur, la mémoire vive ou le système de fichier…) et ne virtualise donc pas la machine. C’est pour cela que l’on parle de « conteneur » et non de machine virtuelle (VM).

Fonctionnalités Linux pour LXC

LXC repose principalement sur 2 fonctionnalités du noyau Linux :

  • La première est la fonctionnalité des cgroups (pour control groups). C’est ce qui permet de limiter et d’isoler l’utilisation des ressources
  • Ensuite, la fonctionnalités de cloisonnement des espaces de nommage (ou namespace en anglais), permet d’empêcher qu’un group puisse « voir » les ressources des autres groupes.

La virtualisation par conteneur est aussi caractérisée par la couche intermédiaire du contrôleur qui gère un ensemble de fonctionnalités pour les conteneurs :

  • En premier lieu il y a évidemment l’interaction des conteneurs avec l’OS.
  • La sécurité par la gestion de privilèges et de ressources
  • La scalabilité : c’est à dire la duplication et la suppression de conteneurs
  • L’accessibilité des conteneurs à travers la gestion des API et CLI
  • La portabilité :c’est à dire la migration (à froid ou à chaud) de conteneurs

Différence entre un conteneur et un VM classique

  • Une machine virtuelle ou VM recrée intégralement un serveur. contenant donc un OS complet, avec ses pilotes, ses fichiers binaires ou bibliothèques, ainsi que l’application elle-même.
  • Comme le conteneur n’’embarque pas d’OS, il est donc beaucoup plus léger que la VM.  Le conteneur est donc plus facile à migrer ou à télécharger, et plus rapide à sauvegarder ou à restaurer.
  • La virtualisation par conteneur permet au serveur d’héberger potentiellement beaucoup plus de conteneurs que s’il s’agissait de machines virtuelles.

Et c’est quoi alors Docker?

Docker était initialement basé sur le LXC de Linux.

Docker est passé à Libcontainer après la v.1.8 (bye bye LXC!).
Rassurez-vous le principe est le même. L’intérêt est que Docker peut maintenant supporter plus de technologies d’isolation

Docker permet de créer des conteneurs qui vont uniquement contenir des applications avec leurs dépendances. Les conteneurs Docker permettent d’embarquer des applications afin de les exécuter au sein de l’ OS hôte mais de manière virtuellement isolée.

Le Docker engine fait tourner les conteneurs et joue le rôle de contrôleur.

En termes d’architecture,

  • Docker fonctionne sur une architecture client serveur.
  • Le client Docker communique avec le Docker daemon qui fait tourner le docker engine, pour construire et gérer les conteneurs Docker.
  • Le client Docket et le daemon Docker peuvent tourner sur la même machine, comme sur des machines différentes.

Maintenant passons à un autre concept important de Docker : il s’agit des images Docker

Une image Docker est un template prêt à l’emploi avec des instructions pour la création de conteneur. L’environnement d’exécution d’un conteneur peut nécessiter l’empilement de plusieurs images

Par exemple :

  • On trouve à la base les composants nécessaires à Docker, et qui sont fournis par le noyau Linux de l’hôte.
  • Ensuite, on va prendre l’exemple de 2 containers avec deux images différentes : un avec Debian et un avec uBuntu.
  • Il est possible d’ajouter d’autres images, par par exemple sur le premier conteneur, on ajoute une image d’editeur de texte emacs et une image de serveur web Nginx.

A noter qu’une image ne peut pas être modifiée directement, elle reste toujours en lecture seule. C’est pour cela qu’on trouve une dernière couche, qui est la partie du conteneur accessible en écriture, qui contiendra toutes les modifications apportées à l’application.

Une image Peut être construit à partir d’un Dockerfile ou bien d’une image existante ou être récupéré sur un Registre Docker. Ces registre sont accessible depuis le docker Hub, un dépôt public d’images

 

Workflow de création d’un conteneur Docker

Lorsque je souhaite crée un container. J’ai la possibilité d’utiliser une image existante que je reprend du registre docker (public ou privé).

A noter que je peux aussi créer l’image via le Docker File. Les Dockerfiles sont des fichiers qui permettent de construire une image Docker étape par étape et ceci de facon automatisé

le Docker engine exécute ensuite cette image pour créer un container. Une fois que j’ai ce nouveau conteneur, je peux décider d’en faire une nouvelle image que je fais restocker dans un registre,

 

Pourquoi est ce que l’on en parle autant?

La principale raison est que  Docker permet de faciliter et  d’accélérer les déploiements. En effet, comme toutes les dépendances sont dans le conteneur, le conteneur est autosuffisant. Les conteneurs Docker fournissent le moyen de transporter de manière fluide les applications de l’environnement de développement jusqu’à l’infrastructure de production.

Les admin system n’ont alors plus qu’à “installer le conteneur” sur leurs serveurs Linux. Ce qui permet aux admin system de moins s’arracher la tête sur la gestion de telle ou telle version de librairies, de logiciels, etc.

En ce sens il rapprochent les équipes de dev et de production. C’est pour cela qu’on associe souvent Docker au Devops.