0% ont trouvé ce document utile (0 vote)
411 vues32 pages

Docker Intro

Ce document introduit Docker et la technologie des conteneurs. Il explique les différences entre conteneurs et machines virtuelles, décrit les concepts clés de Docker comme les images et les conteneurs, et présente les avantages de cette technologie.

Transféré par

Iman khayati
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 PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
411 vues32 pages

Docker Intro

Ce document introduit Docker et la technologie des conteneurs. Il explique les différences entre conteneurs et machines virtuelles, décrit les concepts clés de Docker comme les images et les conteneurs, et présente les avantages de cette technologie.

Transféré par

Iman khayati
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 PPTX, PDF, TXT ou lisez en ligne sur Scribd

INTRODUCTION À DOCKER

INTRODUCTION

• La métaphore docker : “box it, ship it”


• Une abstraction qui ouvre de nouvelles possibilités pour la manipulation logicielle.
• Permet de standardiser et de contrôler la livraison et le déploiement.
RETOUR SUR LES TECHNOLOGIES DE
VIRTUALISATION
• On compare souvent les conteneurs
aux machines virtuelles. Mais ce sont
de grosses simplifications parce qu’on
en a un usage similaire : isoler des
programmes dans des “contextes”. Une
chose essentielle à retenir sur la
différence technique : les conteneurs
utilisent les mécanismes internes du
_kernel de l’OS Linux_ tandis que les
VM tentent de communiquer avec l’OS
(quel qu’il soit) pour directement avoir
accès au matériel de l’ordinateur.
• VM : une abstraction complète pour simuler des machines
• un processeur, mémoire, appels systèmes, carte réseau, carte graphique, etc.
• conteneur : un découpage dans Linux pour séparer des ressources (accès à des dossiers
spécifiques sur le disque, accès réseau).
• Les deux technologies peuvent utiliser un système de quotas pour l’accès aux ressources
matérielles (accès en lecture/écriture sur le disque, sollicitation de la carte réseau, du
processeur)
• Si l’on cherche la définition d’un conteneur :
• C’est un groupe de processus associé à un ensemble de permissions.
• L’imaginer comme une “boîte” est donc une allégorie un peu trompeuse, car ce n’est pas de
la virtualisation (= isolation au niveau matériel).
LES CONTENEURS : DÉFINITION

• On revient à notre définition d’un conteneur :



Un conteneur est un groupe de processus associé à un ensemble de permissions sur le
système.
• 1 container = 1 groupe de process Linux
LXC (LINUX CONTAINERS)

• Originellement, Docker était basé sur LXC. Il a depuis développé son propre assemblage de
ces 3 mécanismes.

En 2013, Docker commence à proposer une meilleure finition et une interface simple qui
facilite l’utilisation des conteneurs LXC.
• Puis il propose aussi son cloud, le Docker Hub pour faciliter la gestion d’images toutes faites
de conteneurs.
• Au fur et à mesure, Docker abandonne le code de LXC (mais continue d’utiliser le chroot,
les cgroups et namespaces).
• Le code de base de Docker (notamment runC) est open source : l'Open Container
Initiative vise à standardiser et rendre robuste l’utilisation de containers.
BÉNÉFICES PAR RAPPORT AUX MACHINES
VIRTUELLES
• Docker permet de faire des “quasi-machines” avec des performances proches du natif.
• Vitesse d’exécution.
• Flexibilité sur les ressources (mémoire partagée).
• Moins complexe que la virtualisation
• Plus standard que les multiples hyperviseurs

• notamment moins de bugs d’interaction entre l’hyperviseur et le noyau


• VM et conteneurs proposent une flexibilité de manipulation des ressources de calcul mais les
machines virtuelles sont trop lourdes pour être multipliées librement :
• elles ne sont pas efficaces pour isoler chaque application
• elles ne permettent pas la transformation profonde que permettent les conteneurs :
• le passage à une architecture microservices
• et donc la scalabilité pour les besoins des services cloud
AVANTAGES DES MACHINES VIRTUELLES

• Les VM se rapprochent plus du concept de “boite noire”: l’isolation se fait au niveau du


matériel et non au niveau du noyau de l’OS.
• même si une faille dans l’hyperviseur reste possible car l’isolation n’est pas qu’uniquement
matérielle
• Les VM sont-elles “plus lentes” ? Pas forcément.
• La RAM est-elle un facteur limite ? Non elle n’est pas cher
• Les CPU pareil : on est rarement bloqués par la puissance du CPU
• Le vrai problème c’est l’I/O : l’accès en entrée-sortie au disque et au réseau
• en réalité Docker peut être plus lent (par défaut) pour l’implémentation de la sécurité réseau (usage du NAT), ou
l’implémentation du réseau de Docker Swarm
• pour l’accès au disque : la technologie d'overlay (qui a une place centrale dans Docker) s’améliore, surtout is on utilise un
filesystem optimisé pour cela (ZFS, btrfs…).
• La comparaison VM / conteneurs est un thème extrêmement vaste et complexe.
POURQUOI UTILISER DOCKER ?

• Docker est pensé dès le départ pour faire des conteneurs applicatifs :
• isoler les modules applicatifs.
• gérer les dépendances en les embarquant dans le conteneur.
• se baser sur l'immutabilité : la configuration d’un conteneur n’est pas faite pour être modifiée après
sa création.
• avoir un cycle de vie court -> logique DevOps du “bétail vs. animal de compagnie”
• Docker modifie beaucoup la “logistique” applicative.
• uniformisation face aux divers langages de programmation, configurations et briques logicielles
• installation sans accroc et automatisation beaucoup plus facile
• permet de simplifier l'intégration continue, la livraison continue et le déploiement continu
• rapproche le monde du développement des opérations (tout le monde utilise la même technologie)
• Permet l’adoption plus large de la logique DevOps (notamment le concept d’infrastructure as code)
INFRASTRUCTURE AS CODE

• on décrit en mode code un état du système. Avantages :


• pas de dérive de la configuration et du système (immutabilité)
• on peut connaître de façon fiable l’état des composants du système
• on peut travailler en collaboration plus facilement (grâce à Git notamment)
• on peut faire des tests
• on facilite le déploiement de nouvelles instances
DOCKER : POSITIONNEMENT SUR LE MARCHÉ

• Docker est la technologie ultra-dominante sur le marché de la conteneurisation


• La simplicité d’usage et le travail de standardisation (un conteneur Docker est un conteneur OCI : format
ouvert standardisé par l’Open Container Initiative) lui garantissent légitimité et fiabilité
• La logique du conteneur fonctionne, et la bonne documentation et l’écosystème aident !
• LXC existe toujours et est très agréable à utiliser, notamment avec LXD (développé par
Canonical, l’entreprise derrière Ubuntu).
• Il a cependant un positionnement différent : faire des conteneurs pour faire tourner des OS Linux
complets.
• Apache Mesos : un logiciel de gestion de cluster qui permet de se passer de Docker, mais
propose quand même un support pour les conteneurs OCI (Docker) depuis 2016.
• Podman : une alternative à Docker qui utilise la même syntaxe que Docker pour faire tourner
des conteneurs OCI (Docker) qui propose un mode rootless et daemonless intéressant.
• systemd-nspawn : technologie de conteneurs isolés proposée par systemd
MANIPULATION DES CONTENEURS
TERMINOLOGIE ET CONCEPTS
FONDAMENTAUX
TERMINOLOGIE

• Deux concepts centraux :


• Une image : un modèle pour créer un conteneur
• Un conteneur : l’instance qui tourne sur la machine.
• Autres concepts primordiaux :
• Un volume : un espace virtuel pour gérer le stockage d’un conteneur et le partage entre
conteneurs.
• un registry : un serveur ou stocker des artefacts docker c’est à dire des images versionnées.
• un orchestrateur : un outil qui gère automatiquement le cycle de vie des conteneurs
(création/suppression).
VISUALISER L’ARCHITECTURE DOCKER

• Daemon - Client - images - registry


L’ÉCOSYSTÈME DOCKER

• Docker Compose : Un outil pour décrire des applications multiconteneurs.


• Docker Machine : Un outil pour gérer le déploiement Docker sur plusieurs machines depuis
un hôte.
• Docker Hub : Le service d’hébergement d’images proposé par Docker Inc. (le registry officiel)
L’ENVIRONNEMENT DE DÉVELOPPEMENT

• Docker Engine pour lancer des commandes docker


• Docker Compose pour lancer des application multiconteneurs
• Portainer, un GUI Docker
• VirtualBox pour avoir une VM Linux quand on est sur Windows
INSTALLER DOCKER SUR WINDOWS

• Docker est basé sur le noyau Linux :


• En production il fonctionne nécessairement sur un Linux (virtualisé ou bare metal)
• Pour développer et déployer, il marche parfaitement sur MacOS et Windows mais avec une méthode de virtualisation :
• virtualisation optimisée via un hyperviseur
• ou virtualisation avec logiciel de virtualisation “classique” comme VMWare ou VirtualBox.

• Quatre possibilités :
• Solution Docker Desktop WSL2 :
• Fonctionne avec Windows Subsystem for Linux : c’est une VM Linux très bien intégrée à Windows
• Le meilleur des deux mondes ?
• Workflow similaire à celui d’un serveur Linux
• Solution VirtualBox : on utilise Docker Engine dans une VM Linux
• Utilise une VM Linux avec VirtualBox
• Workflow identique à celui d’un serveur Linux
• Proche de la réalité de l’administration système actuelle
INSTALLER DOCKER SUR LINUX

• Pas de virtualisation nécessaire car Docker (le Docker Engine) utilise le noyau du système
natif.
• On peut l’installer avec le gestionnaire de paquets de l’OS mais cette version peut être trop
ancienne.
• Sur Ubuntu ou CentOS la méthode conseillée est d’utiliser les paquets fournis dans le dépôt
officiel Docker (vous pouvez avoir des surprises avec la version snap d’Ubuntu).
• Il faut pour cela ajouter le dépôt et les signatures du répertoire de packages Docker.
• Documentation Ubuntu : [Link]
LES IMAGES ET CONTENEURS

• Les images
• Docker possède à la fois un module pour lancer les applications (runtime) et un outil de
build d’application.

Une image est le résultat d’un build :


on peut la voir un peu comme une
boîte “modèle” : on peut l’utiliser
plusieurs fois comme base de
création de containers identiques,
similaires ou différents.
Les conteneurs et Commandes Docker

• Un conteneur est une instance en cours de fonctionnement (“vivante”) d’une image.


• un conteneur en cours de fonctionnement est un processus (et ses processus enfants) qui tourne dans le
Linux hôte (mais qui est isolé de celui-ci)

Docker fonctionne avec des sous-commandes et propose de grandes quantités d’options pour chaque commande.
Utilisez --help au maximum après chaque commande, sous-commande ou sous-sous-commandes
POUR VÉRIFIER L’ÉTAT DE DOCKER

docker info # affiche plein d'information sur l'engine avec lequel vous êtes en contact
docker ps # affiche les conteneurs en train de tourner
docker ps -a # affiche également les conteneurs arrêtés
Créer et lancer un conteneur
• Un conteneur est une instance en cours de fonctionnement (“vivante”) d’une image. docker
run [-d] [-p port_h:port_c] [-v dossier_h:dossier_c] <image> <commande>

• créé et lance le conteneur

• L’ordre des arguments est important !


• Un nom est automatiquement généré pour le conteneur à moins de fixer le nom avec --name
• On peut facilement lancer autant d’instances que nécessaire tant qu’il n’y a pas de collision
de nom ou de port.
Options docker run

• Les options facultatives indiquées ici sont très courantes.


• -d permet* de lancer le conteneur en mode daemon ou détaché et libérer le terminal
• -p permet de mapper un port réseau entre l’intérieur et l’extérieur du conteneur, typiquement lorsqu’on
veut accéder à l’application depuis l’hôte.
• -v permet de monter un volume partagé entre l’hôte et le conteneur.
• --rm (comme remove) permet de supprimer le conteneur dès qu’il s’arrête.
• -it permet de lancer une commande en mode interactif (un terminal comme bash).
• -a (ou --attach) permet de se connecter à l’entrée-sortie du processus dans le container.

Commandes Docker

• Le démarrage d’un conteneur est lié à une commande.


• Si le conteneur n’a pas de commande, il s’arrête dès qu’il a fini de démarrer
• docker run debian # s'arrête tout de suite
• Pour utiliser une commande on peut simplement l’ajouter à la fin de la commande run.
• docker run debian echo 'attendre 10s' && sleep 10 # s'arrête après 10s

• Stopper et redémarrer un conteneur



Docker stop <nom_ou_id_conteneur> # ne détruit pas le conteneur
• docker start <nom_ou_id_conteneur> # le conteneur a déjà été créé
• docker start --attach <nom_ou_id_conteneur> # lance le conteneur et s'attache à la sortie standard
Isolation des conteneurs

• Isolation des conteneurs


• Les conteneurs sont plus que des processus, ce sont des boîtes isolées grâce
aux namespaces et cgroups
• Depuis l’intérieur d’un conteneur, on a l’impression d’être dans un Linux autonome.
• Plus précisément, un conteneur est lié à un système de fichiers (avec des
dossiers /bin, /etc, /var, des exécutables, des fichiers…), et possède des métadonnées
(stockées en json quelque part par Docker)
• Les utilisateurs Unix à l’intérieur du conteneur ont des UID et GID qui existent classiquement
sur l’hôte mais ils peuvent correspondre à un utilisateur Unix sans droits sur l’hôte si on utilise
les user namespaces.
DOCKER HUB : TÉLÉCHARGER DES IMAGES

• Une des forces de Docker vient de la distribution d’images :


• pas besoin de dépendances, on récupère une boîte autonome
• pas besoin de multiples versions en fonction des OS
• Dans ce contexte un élément qui a fait le succès de Docker est le Docker Hub :
[Link]
• Il s’agit d’un répertoire public et souvent gratuit d’images (officielles ou non) pour des milliers
d’applications pré-configurées.
DOCKER HUB:

• On peut y chercher et trouver presque n’importe quel logiciel au format d’image Docker.
• Il suffit pour cela de chercher l’identifiant et la version de l’image désirée.
• Puis utiliser docker run [<compte>/]<id_image>:<version>
• La partie compte est le compte de la personne qui a poussé ses images sur le Docker Hub. Les
images Docker officielles (ubuntu par exemple) ne sont pas liées à un compte : on peut écrire
simplement ubuntu:focal.
• On peut aussi juste télécharger l’image : docker pull <image>
• On peut également y créer un compte gratuit pour pousser et distribuer ses propres images,
ou installer son propre serveur de distribution d’images privé ou public, appelé registry.

Vous aimerez peut-être aussi