Slide 1

Slide 1 text

Docker, mais qu’est-ce que c’est ? Introduction à Docker et son écosystème

Slide 2

Slide 2 text

Qui suis-je ? Julien Maitrehenry DevOps, Cloud Architect, Développeur Co-fondateur @Kumojin Kumojin.com Github.com/jmaitrehenry jmaitrehenry.ca

Slide 3

Slide 3 text

Agenda • Qu’est-ce que Docker ? • Docker Compose • Orchestration • Docker Desktop • Questions ? Photo by Ian Taylor on Unsplash

Slide 4

Slide 4 text

Qu’est-ce que Docker ?

Slide 5

Slide 5 text

Mais que signifie « Docker » ? • Le projet d’une communauté Open Source • Les outils issus de ce projet • L’entreprise Docker inc.

Slide 6

Slide 6 text

Mais à quoi ça sert ?

Slide 7

Slide 7 text

Au commencement • Un seul but • Communauté des développeurs sous linux seulement • Un gros binaire

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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)

Slide 10

Slide 10 text

En quoi c’est différent d’une VM ?

Slide 11

Slide 11 text

Comment créer un conteneur ?

Slide 12

Slide 12 text

Qu’est-ce qu’une image? • Un ensemble de couche • Chaque couche est immutable • Chaque couche est réutilisable

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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)

Slide 18

Slide 18 text

Recap

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Docker Compose

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Construisons un fichier docker compose Sur un réseau séparé de la base de données

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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 • …

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Orchestration • Pourquoi faire ? • Outils d’orchestration • Solutions cloud

Slide 36

Slide 36 text

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 !

Slide 37

Slide 37 text

Outils d’orchestration

Slide 38

Slide 38 text

Solutions Cloud • Basé sur Kubernetes • Azure: AKS • AWS: EKS • Google: GKE • Basée sur des conteneurs • Azure ACI • AWS Fargate • AWS ECS

Slide 39

Slide 39 text

Docker Desktop Qu’est-ce que c’est ? Qu’est-ce que cela apporte ?

Slide 40

Slide 40 text

Questions ?