7. Au commencement
• Un seul but
• Communauté des développeurs
sous linux seulement
• Un gros binaire
8. Et maintenant ?
• Linux et Windows
• Multi Architecture (intel, armv5-8, ppc, i386)
• Docker utilise plusieurs composants séparés
• Standardisation des composants (OCI, CNCF)
• Adopté par une large majorité des clouds
9. Qu’est-ce qu’un
conteneur ?
• Un espace isolé où s’exécute une application
• L’espace isolé contient toutes les libs pour
rouler son application
• Possède sa propre stack réseau, ses users, ses
processus
• Partage le kernel de l’hôte
• Peut avoir des restrictions sur l’utilisation des
ressources (CPU, Ram, etc)
13. Construisons une image docker
Image de base
Variable d’environnement
Variable définie lors du build
Dossier de travail – alias dossier courant
Copie de fichiers dans l’image
Commande executée lors du build
Copie du dossier dans l’image
Commande par défaut qui sera
executée lors d’un docker run
14. Comment transformer notre fichier en image ?
❯ docker build -t myapp:v1.0.0 --build-arg NODE_ENV=development .
Commande pour construire une image
Donner un nom et un tag à l’image
Passer une variable de build
Contexte du build
Si le fichier Dockerfile porte un autre nom ou est situé ailleurs, il faut le spécifier avec :
-f .docker/Dockerfile
Attention : le contexte de build est toujours le dernier paramètre
15. Comment lancer un conteneur ?
- Je ne peux pas accéder à l’app depuis mon navigateur
- Ctr+C n’arrête pas l’app
- Le nom du conteneur va être généré aléatoirement (ex: goofy_kapitsa)
❯ docker run myapp:v1.0.0
Commande pour exécuter un container Nom de l’image et son tag
16. Comment lancer un conteneur ?
❯ docker run –ti -p 8080:80 --name myapp myapp:v1.0.0
Exécute en mode intéractif et avec un tty
Lie le port 80 du container au port 8080 du host
Donne le nom myapp au container
17. Comment lancer un conteneur ?
❯ docker run –d -p 8080:80 --name myapp myapp:v1.0.0
Lance le container en arrière plan
❯ docker run –ti –p 8080:80 --name myapp --rm myapp:v1.0.0 bash
Supprime automatiquement le conteneur quand il sera arrêté
Change la commande par défaut (CMD)
19. Docker Engine
• Application Client-Server pour:
• Gérer des images
• Gérer des conteneurs
• Gérer des réseaux
• Gérer des volumes
• Possède une API REST et un CLI
20. Volume
• Conserver des données en dehors du
conteneur
• Partager des données avec l’hôte
• D’autres drivers possibles
This Photo by Unknown Author is licensed under CC BY-SA-NC
21. Partager un dossier/fichier entre le host et le conteneur
❯ docker run -ti --rm -v `pwd`/mydir:/data ubuntu
Instruction pour utiliser un volume
Dossier local sur l’host Dossier dans le conteneur
Attention dans le cas où l’on monte un fichier !
Les modifications au fichier peuvent ne pas être reflétées dans le conteneur
Ex: sed, vim, etc
22. Utilisation d’un volume
❯ docker volume create mydata
❯ docker run -ti --rm -v mydata:/data ubuntu
Sous commande pour gérer les volumes Nom du volume
Nom du volume au lieu du path local
23. Network
• Permet de créer des réseaux isolés
• Les conteneurs peuvent communiquer entre
eux par nom de container, id ou alias
• Plusieurs drivers disponibles :
• Bridge (default)
• Internal
• None
• Host
24. Internal network
❯ docker network create --internal intnet
❯ docker run --network intnet curlimages/curl -m3 https://google.com
╰─❯ curl: (28) Resolving timed out after 3002 milliseconds
Sous commande pour gérer les réseaux Type de réseau Nom du réseau
Attache le conteneur au réseau intnet
25. Communication intra conteneur
❯ docker network create --driver bridge mynet
❯ docker run -d --network mynet --name nginx --network-alias web nginx
❯ docker run --rm --network mynet curlimages/curl -m3 http://web
Utilise un driver réseau sécifique
Ajoute un alias au conteneur dans les réseaux où il est connecté
Le nom et l’ID du conteneur fonctionne aussi
26. Autres réseaux utiles
❯ docker run --rm --network none curl -m3 https://google.com
❯ docker run –d --network host nginx
Sans isolation réseau entre le conteneur et l’hôte
Sans réseau
28. Construisons un fichier docker compose
Version du format du fichier
Définition des services, alias des conteneurs
Définition des réseaux
Définition des volumes
29. Construisons un fichier docker compose
Nom du service ainsi que de son nom sur les réseaux
Image docker du conteneur
Si le containeur crash, docker le relance
Liste des volumes à attacher au conteneur
Liste des variables d’environnement
Liste des réseaux à attacher au conteneur
30. Construisons un fichier docker compose
Surcharge de la commande par défaut de l’image
On peut attacher un volume dans un dossier d’un autre volume
Définition pour construire l’image Docker
Créer une dépendance à un autre service
Liste des ports à lier sur le host
32. Comment utiliser un un fichier compose ?
❯ docker compose ps -a
Liste les conteneurs créer par compose Incluant ceux arrêtés
❯ docker compose logs -f [nom du/des service(s)]
Affiche les logs Et affiche les nouveaux messages au fur et à mesure
❯ docker compose up –d [nom du/des service(s)]
Sous commande pour gérer compose Lance un/des services/tous les services
En background
33. Registry Docker
• Héberge les images Docker
• Nombreux Registry en ligne disponibles:
• Docker Hub
• Azure ACR
• AWS ECR
• Github Registry
• …
• Nombreuses solutions self-hosted:
• Docker Registry
• Nexus
• Artifactory
• …
34. Commandes utiles
❯ docker login / docker login kumojin.azurecr.io
Connecte Docker à un registry
Télécharge une image dans un registry
Pousse une image du registry localement
❯ docker push jmaitrehenry/myimage
❯ docker pull kumojin.azurecr.io/myapp/api:v1.0.0
Se connecte à un registry spécifique
36. Pour quoi
faire ?
• Approvisionnement et placement des
containeurs
• Mécanisme de healthcheck et métriques
• Gestion des indisponibilités et scalabilité
• Gestion des déploiements
• Service discovery et gestion du réseau
• Et plus encore !