Introduction à Docker
et Docker Compose
Salah Gontara
2022-2023
1
Agenda
Section 1: Section 3:
Qu’est-ce que Docker
Ce qui n’est pas Docker Networking
Commandes Docker de base
Dockerfiles
Section 2: Section 4:
Anatomie d’une image Docker Docker compose / stacks
Docker volumes Démo
2
Section 1:
Qu’est-ce que Docker
Commandes Docker de base
Dockerfiles
3
Qu’est-ce qu’un conteneur ?
• Emballage standardisé pour les
logiciels et les dépendances
• Isole les applications les unes
des autres
• Partage le même noyau de
système d’exploitation
• Fonctionne pour toutes les
principales distributions Linux
• Conteneurs natifs de Windows
Server 2016 et versions ultérieures
4
Le rôle des images et des conteneurs
D o c ke r I m a g e D oc ker Container
E xe m p l e : U b u nt u ave c n œ u d . j s e t C ré é à l ’a i d e d ’u n e i m a g e . E xé c u te
c o d e d ’a p p l i c at i o n vo t re a p p l i c at i o n .
5
Les conteneurs Docker ne sont PAS des VMs
• Connexion facile à faire
• Architectures fondamentalement différentes
• Des avantages fondamentalement différents
Virtual Machine Container
6
Docker Containers Versus Virtual Machines
App 1 App 2
Bins/Libs Bins/Libs
App 1 App 2
Guest O S Guest O S
Bins/Libs Bins/Libs
Hypervisor Docker Engine
Host Operating System Host Operating System
Virtual Mac hines D o c ke r C ontainers
7
• Plateforme légère, ouverte et
sécurisée
Q u ’e s t - c e q u e D o c ke r ? • S i m p l i f ie l a c r é a t i o n , l ’ e xp é d i t i on e t
l ’ e xé c u t i o n d ’ a p p l i c at i on s
• Fonctionne en mode natif sur Linux
ou W indows Server
• S’exécute sur des machines de
développement W indows ou Mac
(avec une machine virtuelle)
• S’appuie sur des « im ages » et des «
conteneurs »
8
Utilisation de Docker : Créer, expédier, exécuter un Workflow
Développeurs Opérations IT
BUILD SHIP RUN
Development Environments Create & Store Images Deploy, Manage, Scale
9
Un peu de vocabulaire Docker
Docker Image
Base d’un conteneur Docker. Représente une application complète
Docker Container
Unité standard dans laquelle réside et s’exécute le service d’application
Docker Engine
Crée, expédie et exécute des conteneurs Docker déployables sur un hôte
physique ou virtuel localement, dans un centre de données ou un
fournisseur de services cloud
Registry Service (Docker Hub(Public) ou Docker Trusted
Registry(Private))
Service de stockage et de distribution cloud ou serveur pour vos images
10
Commandes Docker de base
$ docker image pull node:latest
$ docker image ls
$ docker container run –d –p 5000:5000 –-name node node:latest
$ docker container ps
$ docker container stop node(or <container id>)
$ docker container rm node (or <container id>)
$ docker image rmi (or <image id>)
$ docker build –t node:2.0 .
$ docker image push node:2.0
$ docker --help
11
Dockerfile – Linux Example
• Instructions sur la
création d’une
image Docker
• Ressemble
beaucoup aux
commandes
« natives »
• Important pour
optimiser votre
Dockerfile
12
14
Section 2:
Anatomie d’un conteneur Docker
Docker Volumes
Cas d’utilisation des volumes
13
Revenons à notre Dockerfile
14
Chaque commande Dockerfile crée une couche
…
EXPOSE
COPY
WORKDIR
RUN
FROM
Kernel
15
Docker Image Pull: Pulls Layers
16
Docker Volumes
• Les volumes montent un répertoire sur l’hôte dans le conteneur à un
emplacement spécifique
• Peut être utilisé pour partager (et conserver) des données
entre des conteneurs
• Le répertoire persiste après la suppression du conteneur
• Sauf si vous le supprimez explicitement
• Peut être créé dans un Dockerfile ou via CLI
17
Pourquoi utiliser les volumes
• Monte le code source local dans un conteneur en cours d’exécution
docker container run -v $(pwd):/usr/src/app/
myapp
• Améliore les performances
• À mesure que les structures de répertoires se compliquent, la traversée de
l’arborescence peut ralentir les performances du système
• Persistance des données
18
Section 3:
Networking
19
Qu’est-ce que Docker Bridge Networking
Docker host Docker host
Cntnr 1 Cntnr 2 Cntnr 3 Cntnr 4 Cntnr 5 Cntnr 6 Cntnr 7
bridgenet1 bridgenet2 bridgenet3
docker network create -d bridge --name bridgenet1
20
Docker Bridge Networking et Mapping de port
Docker host 1
Host port Container port
Cntnr1
[Link] :80
$ docker container run -p 8080:80 ...
Bridge
[Link] :8080
L2/L3 physical network
21
Manipulation (1/2)
1. Installez Docker et assurez-vous de l’installation avec les commandes suivantes :
sudo docker version
sudo docker-compose version
2. Commencez par un simple Hello World !
sudo docker run hello-world
3. Créez un réseau virtuel dédié pour les conteneurs à installer.
Utilisez la commande :
sudo docker network create -d bridge --subnet [Link]/24 test_network
22
Manipulation (2/2)
1. Listez les images importées avec la commande :
sudo docker images
2. Démarrez CentOS et Ubuntu avec la commande :
sudo docker run -it image_name bash
3. Confirmez les noms des systèmes en marche avec « os-release ».
4. Arrêtez les conteneurs et relancez-les avec le réseau virtuel dédié avec la
commande :
sudo docker run --network=[…] --ip=[…] -it image_name bash
5. Faites un ping entre les conteneurs pour confirmer l’appartenance au même réseau
virtuel.
23
Section 4:
Docker Compose
24
Docker Compose : Applications multi-conteneurs
• Crée et exécute un conteneur à la fois • Définit une application multi-conteneur dans le
• Connecte manuellement les conteneurs entre fichier [Link]
eux • Commande unique pour déployer l’application
• Doit être prudent avec les dépendances et
• Gère les dépendances de conteneur
l’ordre de démarrage
• Fonctionne avec Docker Swarm, networking,
Volumes, Universal Control Plane
25
49
Docker Compose : Applications multi-conteneurs
version: '2' # specify docker-compose version
# Define the services/containers to be run
services:
angular: # name of the first service
build: client # specify the directory of the Dockerfile
ports:
- "4200:4200" # specify port forewarding
express: #name of the second service
build: api # specify the directory of the Dockerfile
ports:
- "3977:3977" #specify ports forewarding
database: # name of the third service
image: mongo # specify image to build container from
ports:
- "27017:27017" # specify port forewarding
26
Docker Compose: mise à l’échelle
27
Demo
Django Python PostgreSQL
[Link]
28
29