El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
Docker m
1
Concepts Docker
• Flexible : même les applications les plus complexes peuvent être conteneurisées.
• Léger : les conteneurs exploitent et partagent le noyau hôte, ce qui les rend beaucoup
plus efficaces en termes de ressources système que les machines virtuelles.
• Portable : vous pouvez créer localement, déployer sur le cloud et exécuter n'importe
où.
• Faiblement couplé : les conteneurs sont hautement autonomes et encapsulés, ce qui
vous permet de remplacer ou de mettre à niveau l'un sans en perturber les autres.
• Évolutif : vous pouvez augmenter et distribuer automatiquement les répliques de
conteneurs dans un centre de données.
• Sécurisé : les conteneurs appliquent des contraintes et des isolements agressifs aux
processus sans aucune configuration requise de la part de l'utilisateur.
2
Conteneurs et machines •Un conteneur s'exécute
nativement sur Linux et partage
virtuelles le noyau de la machine hôte avec
d'autres conteneurs.
•Il exécute un processus discret,
ne prenant pas plus de mémoire
que tout autre exécutable, ce qui
le rend léger.
•Une machine virtuelle (VM)
exécute un système d'exploitation
«invité» à part entière avec un
accès virtuel aux ressources hôte
via un hyperviseur.
•En général, les machines
virtuelles entraînent beaucoup de
frais généraux au-delà de ce qui
est consommé par la logique de
votre application.
3
Elies Jebri : [Link]@
Docker Engine
gm
• Docker Engine est une application client- a
serveur avec ces composants majeurs: i. l
co
• Un serveur de type longue durée m
d’exécution appelé processus démon
(dockerd).
• Une API REST qui spécifie les interfaces
que les programmes peuvent utiliser
pour parler au démon et lui indiquer
quoi faire.
• Un client d'interface de ligne de
commande (CLI) (docker).
4
Images et conteneurs
• Un conteneur est un processus en cours d'exécution, avec quelques
fonctionnalités d'encapsulation supplémentaires afin de le maintenir
isolé de l'hôte et des autres conteneurs.
• Un aspect important de l'isolation est que chaque conteneur interagit
avec son propre système de fichiers privé
• Ce système de fichiers est fourni par une image Docker .
• Une image comprend tout ce qui est nécessaire pour exécuter une
application - le code ou le binaire, les environnements d'exécution, les
dépendances et tout autre objet du système de fichiers requis.
5
Architecture
Docker
6
El i
e
sJ
e
b
ri
:e
le
s. i
Les images Docker je
b
ri
@
gm
a
i. l
co
• Une image se décompose en layers m
•Une image Docker fait référence à une
liste de couches en lecture seule qui
représentent les différences dans le
système de fichiers.
•Une conteneur = une image + un layer
r/w
• Une image, peut servir de base pour
plusieurs conteneurs
7
Différence entre image et conteneur
• La principale différence entre un conteneur et une image est la couche
inscriptible supérieure.
• Toutes les écritures dans le conteneur qui ajoutent de nouvelles ou modifient
des données existantes sont stockées dans cette couche inscriptible.
• Lorsque le conteneur est supprimé, la couche inscriptible est également
supprimée.
• L'image sous-jacente reste inchangée.
• Étant donné que chaque conteneur a sa propre couche de conteneur
inscriptible et que toutes les modifications sont stockées dans cette couche de
conteneur, plusieurs conteneurs peuvent partager l'accès à la même image
sous-jacente tout en ayant leur propre état de données
8
El i
e
sJ
e
b
ri
:e
le
s. i
Layers je
b
ri
@
gm
a
i. l
•La création de conteneurs d'applications à co
utiliser implique la création d'une image de m
base Docker sur laquelle certains ou tous les
conteneurs d'applications sont basés.
•Les layers peuvent être réutilisés entre
différents conteneurs
• Gestion optimisée de l'espace disque.
•L'utilisation d'une image de base permet
de réutiliser les configurations d'image car
de nombreuses applications partageront des
dépendances, des bibliothèques et une
configuration.
9
Plusieurs conteneurs
10
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
Composition de i. l
co
m
conteneurs
En général, le workflow de développement ressemble à ceci:
• Créez et testez des conteneurs individuels pour chaque
composant de votre application en créant d'abord des images
Docker.
• Assemblez vos conteneurs et votre infrastructure de support
dans une application complète.
• Testez, partagez et déployez votre application conteneurisée
complète.
11
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
Créez et co
m
exécutez un
conteneur
12
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
docker run
13
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
Container
Isolation
14
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
Docker co
m
Lifecycle
15
Créez une
image Docker
16
Dockerfile
• Au lieu de créer une image binaire statique, nous pouvons utiliser un
fichier appelé Dockerfile pour créer une image.
• Le résultat final est essentiellement le même, mais avec un Dockerfile,
nous fournissons les instructions pour construire l'image, plutôt que
juste les fichiers binaires bruts.
• Ceci est utile car il devient beaucoup plus facile de gérer les
changements, d'autant plus que vos images deviennent plus grandes et
plus complexes.
17
Docker build
18
cache
•Docker reconnaît que nous
avions déjà construit
certaines de ces couches dans
nos précédentes versions
d'image
•Comme rien n’a changé
dans ces couches, il utilise
une version mise en cache de
la couche, plutôt que
d'extraire le code une
deuxième fois et d'exécuter
ces étapes.
19
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
Création d’image
20
Dockerfile arguments
21
Volumes
22
volume
•Les volumes sont le mécanisme
préféré pour la persistance des
données générées par et utilisées
par les conteneurs Docker.
•Alors que les montages de
liaison dépendent de la structure
de répertoires et du système
d'exploitation de la machine hôte,
les volumes sont entièrement
gérés par Docker.
23
Bind mount
• Le fichier ou le répertoire n'a
pas besoin d'exister déjà sur
l'hôte Docker.
• Il est créé à la demande s'il
n'existe pas encore.
• Les montages bind sont très
performants, mais ils
dépendent du système de
fichiers de la machine hôte
ayant une structure de
répertoire spécifique
disponible.
24
tmpfs
•Les volumes et les montages bind vous
permettent de partager des fichiers
entre la machine hôte et le conteneur
afin que vous puissiez conserver les
données même après l'arrêt du
conteneur.
•Si vous exécutez Docker sous Linux,
vous avez une troisième option: les
montages tmpfs. Lorsque vous créez un
conteneur avec un montage tmpfs, le
conteneur peut créer des fichiers en
dehors de la couche inscriptible du
conteneur.
25
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
Docker networking
26
Pilotes réseau
Le sous-système réseau de Docker est enfichable, à l'aide de pilotes.
• bridge: Pilote réseau par défaut. Les réseaux bridge sont généralement utilisés lorsque
vos applications s'exécutent dans des conteneurs autonomes qui doivent
communiquer.
• host: Pour les conteneurs autonomes, supprimez l'isolation réseau entre le conteneur
et l'hôte Docker et utilisez directement la mise en réseau de l'hôte.
• overlay: Les réseaux overlay connectent plusieurs nœuds Docker ensemble et
permettent aux services Swarm de communiquer entre eux ou pour faciliter la
communication entre un service Swarm et un conteneur autonome, ou entre deux
conteneurs autonomes sur différents nœuds Docker. Cette stratégie supprime la
nécessité d'effectuer un routage au niveau du système d'exploitation entre ces
conteneurs.
27
Pilotes réseau - suite
• macvlan: permet d'attribuer une adresse MAC à un conteneur, le faisant
apparaître comme un périphérique physique sur votre réseau. Le
démon Docker achemine le trafic vers les conteneurs par leurs adresses
MAC.
• none: Pour ce conteneur, désactivez tous les réseaux. Habituellement
utilisé avec un pilote réseau personnalisé.
• Plugins réseau : vous pouvez installer et utiliser des plugins réseau tiers
avec Docker. Ces plugins sont disponibles auprès de Docker Hub ou
auprès de fournisseurs tiers.
28
:e
Le driver Bridge le
s. i
je
b
ri
@
gm
• Le réseau bridge est le type de réseau le plus a
couramment utilisé. .ic l
o
m
• Il est limité aux conteneurs d'un hôte unique
exécutant le moteur Docker.
• Les conteneurs qui utilisent ce driver, ne peuvent
communiquer qu'entre eux, cependant ils ne
sont pas accessibles depuis l'extérieur.
• Pour que les conteneurs sur le réseau bridge
puissent communiquer ou être accessibles du
monde extérieur, vous devez configurer le
mappage de port.
29
El i
e
sJ
e
b
ri
:e
le
s. i
Le driver host je
b
ri
@
gm
a
•Ce type de réseau permet i. l
co
aux conteneurs d'utiliser la m
même interface que l'hôte.
•Il supprime donc l'isolation
réseau entre les conteneurs
et seront par défaut
accessibles de l'extérieur.
•De ce fait, il prendra la
même IP que votre machine
hôte.
30
•Si vous souhaitez une mise en
réseau multi-hôte native, vous devez
utiliser un driver overlay.
•Il crée un réseau distribué entre
plusieurs hôtes possédant le moteur
Docker.
•Docker gère de manière
transparente le routage de chaque
paquet vers et depuis le bon hôte et
le bon conteneur.
Le driver overlay
31
El i
e
sJ
e
b
ri
:e
le
s. i
Le driver macvlan je
b
ri
@
gm
a
•L'utilisation du driver macvlan est parfois le i. l
co
meilleur choix lorsque vous utilisez des m
applications qui s'attendent à être
directement connectées au réseau physique,
car le driver Macvlan vous permet d'attribuer
une adresse MAC à un conteneur, le faisant
apparaître comme un périphérique physique
sur votre réseau.
•Le moteur Docker route le trafic vers les
conteneurs en fonction de leurs adresses
MAC.
32
Port Mapping
•Une fois le conteneur opérationnel, il
expose un ou plusieurs ports (par exemple,
le conteneur d'une API peut exposer le port
80).
•Étant donné que nous devons accéder au
conteneur à partir de notre hôte local, nous
devons mapper un port local sur l'un des
ports exposés par le conteneur.
•Si le conteneur expose le port 80, nous
pouvons exécuter docker run -p 8000:80
image-name.
•L'indicateur -p mappe les ports externes
et internes, nous permettant d'accéder au
conteneur en naviguant vers
localhost:8000.
33
Bridge Docker0
•Le pont (Bridge) docker0 a
l'adresse .1 du réseau Docker qui
lui a été assigné, c'est
généralement quelque chose
autour de 172.17 ou 172.18.
•Les conteneurs se voient attribuer
une interface veth qui est
attachée au pont docker0.
•Les conteneurs créés sur le
réseau Docker par défaut reçoivent
l'adresse .1 comme route par
défaut.
34
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
Docker
compose
Elies 35
Jebri
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
• Docker Compose est un outil permettant de définir le
comportement de vos conteneurs et d’exécuter des
applications Docker à conteneurs multiples.
Introduction • La config se fait à partir d'un fichier YAML, et ensuite, avec une
seule commande, vous créez et démarrez tous vos conteneurs
de votre configuration.
Elies 36
Jebri
Docker compose
• Avec les applications à plusieurs niveaux (tiers), Dockerfile et les commandes d'exécution
deviennent de plus en plus complexes.
• Docker Compose est un outil pour rationaliser la définition et l'instanciation des
applications Docker multi-niveaux et multi-conteneurs.
• Compose nécessite un seul fichier de configuration et une seule commande pour organiser
et augmenter le niveau d'application.
• Docker Compose simplifie la conteneurisation d'une application à plusieurs niveaux et à
plusieurs conteneurs, qui peuvent être assemblées à l'aide du fichier de configuration
[Link] et de la commande docker-compose pour fournir un service
d'application unique.
• Le fichier Compose permet de documenter et de configurer toutes les dépendances de
service de l'application (bases de données, files d'attente, caches, API de service Web, etc.)
37
Docker compose - suite
Docker Compose définit et exécute des services complexes:
• définit des conteneurs uniques via Dockerfile
• décrit une application multi-conteneurs via un fichier de configuration
unique ( [Link] )
• gère la pile d'applications via un seul binaire ( docker-compose up )
• lie des services via Service Discovery
38
[Link]
• Le fichier de configuration Docker Compose spécifie les services, les
réseaux et les volumes à exécuter:
• services - l'équivalent de passer des paramètres de ligne de
commande à l'exécution de docker
• networks - analogues aux définitions du réseau docker créer
• volumes - analogues aux définitions du volume docker create
39
YAML
• Le fichier de configuration Compose est au format déclaratif YAML :
• Y AML A in't M arkup L anguage (YAML)
• La philosophie de YAML est que «lorsque les données sont faciles à visualiser
et à comprendre, la programmation devient une tâche plus simple»
• Convivial et compatible avec les langages de programmation modernes pour
les tâches courantes
• Structure minimale pour un maximum de données:
• L'indentation peut être utilisée pour la structure
• Les deux-points (:) séparent les paires de clé : valeurs
• Les tirets sont utilisés pour créer des listes à puces
40
version: "3"
services:
web:
build: .
volumes:
- web-data:/var/www/data
redis:
Exemple image: redis:alpine
ports:
- "6379"
networks:
- default
41
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
42
El i
e
sJ
e
b
ri
Exemple fichier Docker-compose – Blog App :e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
43
El i
e
sJ
e
b
ri
Service Discovery :e
le
s. i
je
b
ri
• Service Discovery en lui-même est une exigence clé pour faire évoluer les applications @
gm
multiservices à l'aide de l'équilibrage de charge (scale-out) basé sur DNS. a
i. l
• La découverte de service (Service Discovery ) est intégrée à Docker, et offre deux co
m
avantages clés:
• l'enregistrement du service et le mappage du nom du service vers l'IP (DNS).
• La découverte de services est particulièrement utile dans le contexte d'applications
évolutives, car elle permet de découvrir et de référencer les services multi-conteneurs de
la même manière que les services à conteneur unique;
• avec Service Discovery, la communication intra-application est simple et concise:
n'importe quel service peut être référencé par son nom, quel que soit le nombre
d'instances de conteneur utilisées pour exécuter ce service.
44
El i
e
sJ
e
b
ri
:e
le
s. i
Service Discovery je
b
ri
@
gm
a
i. l
co
m
• Service fourni par du DNS embarqué
• Hautement disponible (HA)
•Utilise le Network Control Plane pour
identifier les états
• Peut être utilisé pour découvrir les
services et les conteneurs
45
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
i. l
co
m
46
El i
e
sJ
e
b
ri
:e
le
s. i
je
b
ri
@
gm
a
Scale-out i. l
co
avec Docker- m
compose
47