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 Slide

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

    View Slide

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

    View Slide

  4. Qu’est-ce
    que Docker ?

    View Slide

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

    View Slide

  6. Mais à quoi
    ça sert ?

    View Slide

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

    View 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 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 Slide

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

    View Slide

  11. Comment
    créer un
    conteneur ?

    View Slide

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

    View 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 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 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 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 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 Slide

  18. Recap

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  27. Docker
    Compose

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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 !

    View Slide

  37. Outils d’orchestration

    View Slide

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

    View Slide

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

    View Slide

  40. Questions ?

    View Slide