Archives par mot-clé : Linux

Le système d’exploitation pour les nuls

Dans ce post, je vais vous parler de l’OS (pour Operating System en anglais) ou système d’exploitation en français.

Qu’est ce qu’un OS? A quoi sert-il?

Le système d’exploitation est présent dans divers appareil électronique :

  • Sur les ordinateurs avec Windows et Mac OS
  • Le marché des serveurs avec Windows Serveur et Linux
  • Tout comme un smartphone ou une tablette avec iOS et Android

On voit tous ce qu’est un OS mais est ce que vous savez vraiment à quoi il sert?

 

Première chose à savoir c’est que l’OS est le 1er programme exécuté lors du démarrage d’une machine. Parce qu’un ordinateur ne fait qu’éxécuter des ordres (instructions). Et c’est l’OS qui va le guider dans le démarrage , quels sont les première actions à réaliser, ce qu’il faut afficher. Et c’est après ce démarrage que l’OS vous donne la main pour que vous puissiez vous servir de l’ordinateur.

Au delà du démarrage, le rôle de l’OS est d’assurer le lien entre les ressources matérielles de la machine et les logiciels applicatifs qui tournent dessus.

Pour illustrer tout ça, on va dire que L’OS est un guichet. En effet, l’OS reçoit des demandes des application pour l’utilisation des ressources de la machin. Et parmi les ressources de la machines, on aura par exemple ressources de stockage, de mémoires, des disques durs ou alors des ressources de calcul du processeur.

Le système d’exploitation accepte ou refuse ces demandes, puis réserve les ressources pour éviter que leur utilisation n’interfère avec d’autres demandes des autres applications.

Et en ce sens l’OS est responsable de la bonne exécution des applications via l’affectation des es ressources nécessaire au bon fonctionnement. Les utilisateurs interagissent donc avec les applications qui elles communiquent avec l’OS.

Néanmoins il est possible aussi pour Les utilisateurs de demander directement des services au système d’exploitation par une interface graphique, des lignes de commandes, des interfaces de programmation.

Maintenant nous allons voir les composants les plus important dans un OS et leur rôle :

  • Le kernel (ou noyau en francais) est un espace mémoire isolé repregoupant les fonctions clé de l’OS comme la gestion de la mémoire, des processus ou des entrées-sorties principales.
  • L’interpréteur de commande (en anglais shell) permettant la communication avec le système d’exploitation par l’intermédiaire d’un langage de commandes.
  • Le «File System» ou système de fichiers (en français), permet d’enregistrer les fichiers dans une arborescence. mais aussi de gèrer et autoriser la lecture et l’écriture des fichiers. Il offre également des mécanismes de protection permettant de contrôler quel utilisateur ou programme peut manipuler quel fichier.
  • Pilotes (ou drivers en anglais) qui sont des gestionnaires de périphériques) assure les entrées / sorties avec les périphériques comme les imprimantes, webcam, clé USB, souris etc. Chaque périphérique a ses propres instructions, avec lesquelles il peut être manipulé. Et evidemment Le système d’exploitation en tient compte.

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.