Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker, mais qu'est-ce que c'est ?

Docker, mais qu'est-ce que c'est ?

Introduction à Docker et son écosystème

Julien Maitrehenry

June 10, 2022
Tweet

More Decks by Julien Maitrehenry

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. Qu’est-ce
    que Docker ?

    View full-size slide

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

    View full-size slide

  6. Mais à quoi
    ça sert ?

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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)

    View full-size slide

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

    View full-size slide

  11. Comment
    créer un
    conteneur ?

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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)

    View full-size slide

  18. 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

    View full-size slide

  19. 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

    View full-size slide

  20. 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

    View full-size slide

  21. 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

    View full-size slide

  22. 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

    View full-size slide

  23. 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

    View full-size slide

  24. 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

    View full-size slide

  25. 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

    View full-size slide

  26. Docker
    Compose

    View full-size slide

  27. 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

    View full-size slide

  28. 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

    View full-size slide

  29. 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

    View full-size slide

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

    View full-size slide

  31. 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

    View full-size slide

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

    View full-size slide

  33. 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

    View full-size slide

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

    View full-size slide

  35. 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 !

    View full-size slide

  36. Outils d’orchestration

    View full-size slide

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

    View full-size slide

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

    View full-size slide