0% ont trouvé ce document utile (0 vote)
52 vues9 pages

Chapter2 Conteneurisation@MBS2022

Transféré par

90zkerimcano
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
52 vues9 pages

Chapter2 Conteneurisation@MBS2022

Transféré par

90zkerimcano
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Agenda 2

1. Virtualisation versus conteneurisation


2. Les Fondations Linux
Virtualisation et Cloud 2.1. chroot
2.2. cgroups
Chapitre 2 : La Conteneurisation 2.3. namespace
3. Les outils de conteneurisation
3.1. LXC
Octobre 2022 3.2. Docker

Enseignante : Maymouna BEN SAID

1. Virtualisation versus conteneurisation (Cont.) 3 1. Virtualisation versus conteneurisation (Cont.) 4

Plusieurs logiciels sur le même hôte : Problème [1]? Virtualisation basée Hyperviseur

• Interaction entre les différents logiciels est possible : • Émule un ordinateur complet : possibilité d’émuler d’autres
types de hardware, architectures CPU et OS, etc.
• accès au même chemin sur le système de fichiers
• accès aux mêmes ressources matérielles (ports, cpu, etc) • Isolation des applications via les VMs

• La mise à jour du système d’exploitation / (d’un logiciel) va


nécessairement impacter tous les logiciels qui tournent dessus Niveau d’isolation élevé : problème résolu
Nouveaux problèmes :
• Pour des logiciels fournis par des éditeurs différents, la cohabitation Un nouveau OS est nécessaire
est très souvent problématique Stockage VM important même avec OS minimal
Trop d’éléments dans une VM
➡Solution : la virtualisation

[1] : Docker—Pratique des architectures à base de conteneurs, Dunod [1] : Docker—Pratique des architectures à base de conteneurs, Dunod
1. Virtualisation versus conteneurisation (Cont.) 5 1. Virtualisation versus conteneurisation 6

Virtualisation basée Conteneur Virtualisation basée Conteneur


• Couche de virtualisation sans hyperviseur
• Permet le fonctionnement de plusieurs applications Solution de compromis
dans un environnement isolé ou limité
• Les applications conteneurisées communiquent
directement avec le système hôte et sont capables Une architecture qui permet au développeur d’embarquer l’ensemble des dépendances
ainsi de s’exécuter sur le système d’exploitation hôte et logicielles et de les isoler
sur l’architecture du CPU Stockage très léger : le conteneur s’appuie sur le noyau du système hôte
Le nombre de conteneurs qu’un système hôte peut encapsuler est nettement très supérieur que
son équivalent en VMs
Coté Cloud : offre des performances meilleures
Démarrage facile au bout de quelques secondes : ne nécessite pas une émulation du hardware et Coté entreprise : remplacer les solutions couteuses (hyperviseurs) par des conteneurs
le démarrage d’un système d’exploitation
Taille des applications conteneurisées (images) très petite vis à vis celle d’une image d’une VM
La portabilité des conteneurs est une approche intéressante dans le développement des Les conteneurs permettent de réduire les coûts, d’augmenter la densité de
applications l'infrastructure, tout en améliorant le cycle de déploiement.
Gestion facile des projets dans une machine : pas de conflit de dépendance

[1] : Docker—Pratique des architectures à base de conteneurs, Dunod [1] : Docker—Pratique des architectures à base de conteneurs, Dunod

2. Les Fondations Linux (Cont.) 7 2. Les Fondations Linux (Cont.) 8

Définition La commande “jail” : chroot


• La conteneurisation utilise les propriétés existantes (fonctionnalités) du noyau du système
d’exploitation pour créer un environnement isolé pour les processus. Définition : chroot (change root )(1979)— Commande qui permet le changement du répertoire
racine d’un processus et de ses processus fils (sous-processus)

chroot fournit un espace disque isolé pour chaque


processus
chroot peut prévenir les logiciels malveillants de
l’accès à des fichiers à l’extérieur de l’espace
crée (faux répertoire /)
chroot n’offre aucun autre mécanisme d’isolation
processus à part le changement du répertoire
racine (/) du processus
2. Les Fondations Linux (Cont.) 9 2. Les Fondations Linux (Cont.) 10

Contrôle de ressources : cgroups (Control Groups) Les espaces de nom : Namespaces


Définition : une fonctionnalité du noyau Linux pour limiter, compter et isoler l’utilisation Définition : Namespace — Les namespaces (ou "espaces de noms") isolent les
des ressources (processeur, mémoire, utilisation disque, etc.)—wikipedia.fr ressources partagées. Ils donnent à chaque processus sa propre vue unique du PID 1
système, limitant ainsi leur accès aux ressources système sans que le processus en
cours ne soit au courant des limitations.— https://devopssec.fr
• cgroups (2006) fournit un mécanisme pour rassembler des processus dans un groupe et limiter leur
accès aux ressources système.
Permettent de disposer d’un environnement distinct pour : PID, PID 2
• L’objectif est de contrôler la consommation des ressources par processus.
• Les ressources sont : Temps CPU, Mémoire système Disque dur (stockage), Bande passante (réseau). réseau, points de montage, utilisateurs et groupes, etc.
• Par défaut, chaque système Linux possède un unique PID 3 (réel)
espace de nom (Namespace)
• Tous les ressources système ( système de fichiers, Namespace X : PID 1
processus PID, IDs des utilisateurs, interfaces réseau,
etc.) appartiennent à cet espace de nom.
• On peut créer des espaces de nom additionnels pour
organiser les ressources à l’intérieur. PID 4 (réel)

Une utilisation importante des espaces de nom,


Namespace X : PID 2
“namespaces”, est l’implémentation d’une virtualisation
légère (conteneurisation)
Répartition des ressources Namespace X de type PID

2. Les Fondations Linux 11 2. Les Fondations Linux 12

Qu’est ce qu’un Conteneur ? Qu’est ce qu’un Conteneur ?

• Un conteneur est un système de fichiers (RootFS) sur le quel s’exécutent des processus en respectant • Un conteneur Linux est un processus ou tourne un ensemble de processus isolés du
les règles suivantes :
L’isolation : les conteneurs ne se voient pas les uns des autre reste du système, tout en étant légers.
La limite en terme de ressources • Le conteneur permet de faire de la virtualisation légère, c’est-à-dire qu'il ne virtualise
• Pour les conteneurs, on n'installe pas d'OS à proprement parler, mais un rootfs (le / d'un unix/Linux) qui
est appelé image, qui contient les bibliothèques et les binaires nécessaires. pas les ressources, il ne crée qu'une isolation des processus : les ressources CPU,
RAM et disque sont totalement partagées avec l'ensemble du système.
Container Runtime : • Un conteneur doit être léger, il ne faut pas ajouter de contenu superflu dans celui-ci
environnement d’exécution des
conteneurs afin de le démarrer rapidement, mais il apporte une isolation moindre que la VM. A

• Les différentes initialisations au système contrario, les machines virtuelles offrent une très bonne isolation, mais elle sont
d’exploitation qui permettent d’isoler un globalement plus lentes et bien plus lourdes
environnement seront prises en charge et
abstraites par l’environnement d’exécution
des conteneurs (container runtime), qui
devra être installé sur la machine hôte :
c’est le seul pré-requis à l’exécution de
conteneurs.
3. Les Les outils de conteneurisation (Cont.) 13 3. Les Les outils de conteneurisation (Cont.) 14

Historique
LXC

• 1979 : Unix V7 chroot


• 2000 : FreeBSD Jails • LXC est un projet en open source soutenu financièrement par Canonical
• 2001 : LinuxVServer • Site web : http://linuxcontainers.org/
• 2004 : Solaris Containers • Plus de 60 contributeurs
• 2005 : OpenVZ • Mainteneurs : Serge Hallyn(Ubuntu), Stéphane Graber(Ubuntu)
• 2006 : cgroups • Intégré au noyau 2.6.24 : création des instances isolées baptisées “Conteneur Linux” ou LXC
• 2008 : namespaces (LinuX Containers)
• 2008 : LXC • LXC utilise la notion de contrôle de ressource “cgroups” et propose également une isolation au
• 2011 : Warden (Cloudfoundry) niveau des espaces de nom (Namespaces) et les modules ‘Application Armor’ (AppArmor) et
• 2013 : Lmctfy (google) : https://github.com/google/lmctfy Security-Enhanced Linux (SELinux).
• 2013 : Docker • LXC est une technologie de conteneurisation qui offre des conteneurs Linux légers

3. Les Les outils de conteneurisation—Docker(Cont.) 15 3. Les Les outils de conteneurisation—Docker(Cont.) 16

Docker Docker

• Docker est un projet open source écrit en GO et • Docker (ou, très précisément, le docker engine) est un programme qui va nous permettre de
hébergé sur GitHub ( https://github.com/docker).
créer des conteneurs Linux et d’y installer des environnements prêts à l’emploi, les images.
• Le projet a été initialement développé par la startup • Docker propose une solution beaucoup plus légère, basée sur la capacité du système Linux à
DotCloud en 2013
créer des espaces isolés auxquels on affecte une partie des ressources de la machine-hôte.
• Docker a utilisé LXC à ses débuts et qui a été • Ces espaces, ou containers partitionnent en quelque sorte le système-hôte en sous-
remplacé par la suite par sa propre bibliothèque,
systèmes étanches, au sein desquels le nommage (des processus, des utilisateurs, des ports
libcontainer
réseaux) est purement local.
• Docker s’exécute toujours dans un environnement de • Par exemple : On peut par exemple faire tourner un processus apache sur le port 80 du
type Unix: Linux ou Mac OSX. Si vous avez une
conteneur A, un autre processus apache sur le port 80 du conteneur B, sans conflit ni
machine sous Windows, Docker propose une
confusion.
machine virtuelle Linux ultra-légère au sein de • Tous les nommages sont en quelque sorte interprétés par rapport à un container donné
laquelle il s’exécute.
(notion d’espace de nom)
3. Les Les outils de conteneurisation—Docker(Cont.) 17 3. Les Les outils de conteneurisation—Docker(Cont.) 18

Architecture de Docker
Différences entre Docker & LXC ?
• Docker utilise une architecture client-serveur :
• Docker restreint l’utilisation du conteneur à une seul service (“one service per container” Docker Client demande à Docker daemon de créer un conteneur
philosophy) : il faut construire X conteneurs pour une application qui consiste de X services. Docker Daemon fait la construction, l’exécution, et la distribution du conteneur et ce en
On peut utiliser un seul conteneur Docker pour lancer plusieurs services via un script communiquant avec le noyau via libcontainer
mais il est généralement recommandé d’utiliser un service par conteneur. • Docker Daemon et libcontainer existent sur la même machine ou système
• LXC peut contenir plusieurs processus à l’intérieur d’un conteneur • Docker client peut fonctionner sur une machine distante

• Docker construit sur LXC pour y ajouter des services de gestion et de déploiement d’images.
• Portabilité des conteneurs entre deux machines
• Automatisation : création des conteneurs à partir des fichiers Dockerfile
• Docker est un outil de création et distribution d’application portable via le concept d’image

• l'objectif principal de Docker est de faire le paquetage, la conteneurisation, la


distribution et l’exécution des applications autant de fois, n’importe où et à tout
moment

3. Les Les outils de conteneurisation—Docker(Cont.) 19 3. Les Les outils de conteneurisation—Docker(Cont.) 20

Architecture de Docker
Registry : dépôt /répertoire contenant Workflow Docker
toutes les images
‣ open-source : on peut la télécharger et
héberger une version locale pour les 1. Docker Client demande à Docker daemon de créer un conteneur en utilisant une
images des conteneurs privées. image spécifique
2. Docker daemon télécharge l’image depuis le dépôt Registry
3. Docker daemon communique avec le noyau Linux via libcontainer pour créer le
1 Client Application : interface conteneur
de commande client, Pour construire un espace isolé pour l’application, le conteneur est crée avec les
2 nommée docker CLI. Le fonctionnalités noyau : namespaces, cgroups
docker CLI et le docker
3 deamon communiquent via
des APIs REST

Docker = Docker
libcontainer : bibliothèque standard de daemon : processus qui
gestion des conteneurs qui permet l’accès s’exécute sur le système
aux APIs du noyau tels que CGroups d’exploitation
et namespaces sans aucune autre
dépendance externe
3. Les Les outils de conteneurisation—Docker(Cont.) 21 3. Les Les outils de conteneurisation—Docker(Cont.) 22

Les apports de Docker—Notion d’Image Les apports de Docker—Hub et Images

• Image : c’est le template / modèle, les données de l’application prêtes à l’emploi • Les images sont disponibles dans des dépôts : https://hub.docker.com https://
• Archive qui peut être échangée entre plusieurs hôtes et réutilisée tant de fois store.docker.com
• Une image Docker représente le système de fichiers, sans les processus. • Ce dépôt contient les images déposées par les autres
• Elle contient tout ce que vous avez décidé d’y installer mais est dans un état inerte. • Choix multiple : possibilité de télécharger des versions
• Les images sont créées à partir de fichiers de configuration, nommés “Dockerfile”. • Le dépôt git d'une image contient les informations sur les options possibles et les explications
• Conteneur : instance qui fonctionne / peut être démarrée • Contraintes de sécurité liées à l’utilisation des images publiques ?

3. Les Les outils de conteneurisation—Docker(Cont.) 23 3. Les Les outils de conteneurisation—Docker(Cont.) 24

Gestion d’une image— docker pull / docker push Gestion d’une image— Construction d’une image

1. docker pull : télécharger une image 1. docker commit Construction d’une image à partir d’un conteneur

docker commit [OPTIONS] CONTAINER [REPOSITORY/ImageName:TAG]


docker pull [OPTIONS] ImageName:TAG

Télécharger / extraire une image depuis le dépôt (registry) Docker Hub


TAG est la version (par defaut latest) 2. Construction d’une image à partir du fichier Dockerfile
Exemple : docker pull debian:8.5
• Une image est construite à partir d’un fichier de description appelé Dockerfile
2. docker push : envoyer (uploader) l’image sur un serveur
3.
• Le fichier Dockerfile contient les commandes nécessaires pour :
télécharger une image de base
docker push ImageName:TAG appliquer une série de commandes spécifiques
décrire l’environnement d’exécution
3. Les Les outils de conteneurisation—Docker(Cont.) 25 3. Les Les outils de conteneurisation—Docker(Cont.) 26

Gestion d’une image— Construction d’une image Gestion d’un conteneur— Création d’un conteneur

• docker build : créer une image à partir d’un Dockerfile • docker create : créer un conteneur à partir d’une image
docker build [OPTIONS] PATH
docker create -- name ContainerName [OPTIONS] ImageName:TAG [COMMAND]

Image de base • ContainerName — Nom du conteneur à créer


• ImageName:TAG — Nom de l’image à exécuter et version
Installer les dépendances • Command —Commande à exécuter dans le docker
• Exemples d’options :
Copier un code
-v HostVolume : ContainerVolume — Crée un volume partagé entre l’hôte et le conteneur
Commande qui sera - - network — Choisir le réseau du Docker
exécutée au
démarrage p HostPort : DockerPort — mapping de port entre l’hôte et le conteneur

3. Les Les outils de conteneurisation—Docker(Cont.) 27 3. Les Les outils de conteneurisation—Docker(Cont.) 28

Gestion d’un conteneur— Commandes Gestion d’un conteneur— Réseau Docker


Lancer un conteneur à partir d’une image • Lors de la création d’un conteneur, trois réseaux sont automatiquement définis :

docker run - -name ContainerName ImageName:Tag command


Bridge : le réseau interne par défaut attaché au conteneur
Lancer un conteneur (existant)
Host : réseau de la machine hôte
docker start ContainerName None : réseau isolé, le conteneurs est complètement et n’a pas d’accès à aucun réseau et
n’a pas d’accès au monde externe
• docker run = docker create + docker start
Arrêter un conteneur
• Tous les conteneurs sont associés par défaut au réseau Bridge et ont des adresses à l’intérieur
docker stop ContainerName • Pour permettre l’accès aux conteneurs depuis l’extérieur, il faut faire le mapping de port entre
l’hôte et le conteneur ou associer le conteneur au réseau “host”
Lister les conteneurs exécutés • Deux conteneurs qui sont crées sur le même réseau peuvent communiquer directement sans
docker ps aucune configuration soit via leurs adresses IP ou leurs hostnames
Lister les conteneurs existants

docker ps -a

Exécuter une commande dans un docker existant


docker exec -it ContainerName Command
3. Les Les outils de conteneurisation—Docker(Cont.) 29 3. Les Les outils de conteneurisation—Docker(Cont.) 30

Gestion d’un conteneur— Port Publishing


Gestion d’un conteneur— Réseau Docker
• Par défaut et lors de la création, un conteneur ne partage aucun port avec l’extérieur
La publication de ports réseau est un moyen de permettre au conteneur de communiquer avec
d'autres conteneurs et le monde externe.
• Publier un port (- - publish / -p)
Publie un port conteneur à un port host (mapping)
Exemple d’utilisation : Transfert de tout le trafic de données entrant sur le port hôte 8000 au
port conteneur 8080

docker run --publish 8000:8080 image

• 8000 : port usuel de l’application conteneurisée


• 8080 : port hôte (accès conteneur)

3. Les Les outils de conteneurisation—Docker(Cont.) 31 3. Les Les outils de conteneurisation—Docker(Cont.) 32

Gestion d’un conteneur— Port EXPOSE Gestion d’un conteneur— Gestion des données Docker
• Les données dans un conteneur sont éphémères : les fichiers créés à l'intérieur d'un conteneur
• Exposer un port (EXPOSE, utilisé dans le DOCKERFILE ) sont stockés sur un espace de travail : couche de conteneur inscriptible (writable).
Indique le port sur le quel le conteneur écoute / accepte tous le trafic entrant. Cela signifie que : Les données ne sont pas conservées lorsque ce conteneur est supprimé
Correspond généralement au port usuel de l’application • Trois méthodes de stockages :
• tmpfs mount : (éphémère) permet de stocker les données dans la mémoire du système hôte
• Rôle de EXPOSE en plus de la couche inscriptible
(1) Fournir de la documentation • volume : configurer un volume Docker commun entre hôte et conteneur au moment du
• Indique le port sur le quel le conteneur écoute / accepte tous le trafic entrant. lancement
• bind mount : monter un répertoire du système de fichier hôte au conteneur lors de son
(2) Informe Docker Deamon sur le port de l’application si le flag ‘-P’ est utilisé lancement
• Le flag ‘-P’ (—publish-all) indique à Docker de publier tous les ports de l’application :
Docker a besoin de connaitre ces ports (see exposed ports)

docs.docker.com
3. Les Les outils de conteneurisation—Docker(Cont.) 33 3. Les Les outils de conteneurisation—Docker(Cont.) 34

Autour de Docker—Ecosystème Docker Docker Compose

• Les L’écosystème Docker regroupe tous les utilitaires utilisés avec Docker :
Docker Engine : c’est l’application client-serveur open source dont les composants centraux
sont : démon et client Docker.
Docker machine : outil de gestion et provisioning des machines virtuelles exécutant Docker.
C’est un script utilisé pour la création des machines virtuelles utilisant docker.
Docker Swarm : Un swarm est un groupe de machines exécutant Docker et appartenant à un
Cluster
Docker Compose : outil permettant de définir le comportement de plusieurs conteneurs qui
dépendent les uns des autres et qui permet leur lancement

Vous aimerez peut-être aussi