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

Avatar for Julien Maitrehenry

Julien Maitrehenry

June 10, 2022
Tweet

More Decks by Julien Maitrehenry

Other Decks in Technology

Transcript

  1. Dev, Ops, Architect, SRE, … Utilise des technos avant d’être

    stable en prod Chief Architect @ Paren Docker Captain jmaitrehenry.ca Julien Maitrehenry linkedin.com/in/jmaitrehenry github.com/jmaitrehenry 2
  2. Agenda • Qu’est-ce que Docker ? • Docker Compose •

    Orchestration • Docker Desktop • Questions ? Photo by Ian Taylor on Unsplash
  3. La compagnie La plateforme Le run:me de containeur Spécifications du

    Runtime et des images Mais que signifie « Docker » ?
  4. Et maintenant ? • Linux et Windows • Multi Architecture

    (Intel, ARM, PPC, i386) • Docker splitté en composants séparés • Standardisation des composants (OCI, CNCF) • Adopté par une large majorité des entreprises et cloud providers
  5. 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)
  6. Qu’est-ce qu’une image? • Un manifeste • Un ensemble de

    couches ordonnées • Immutables • Réutilisables • Représente des changements (ajout/modification/suppression de fichiers) • Une configuration • Spécification libre: OCI Image Format Conteneur Base OS Personnalisa:ons Application
  7. 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
  8. 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
  9. Runtime Buildtime Multistage Build • Réduire la taille finale •

    Diminuer la surface d’attaque • Simplifier le build
  10. 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
  11. 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
  12. 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)
  13. Docker Engine • Applica=on 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
  14. Volume • Conserver des données en dehors du conteneur •

    Partager des données avec l’hôte • D’autres drivers possibles Host Container Filesystem /app
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. Construisons un fichier docker compose Déprécié, la version sera ignoré

    Définition des services, alias des conteneurs Définition des réseaux Définition des volumes
  22. 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
  23. Construisons un fichier docker compose Surcharge de la commande par

    défaut de l’image On peut aQacher 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
  24. Comment utiliser 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
  25. 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 • …
  26. 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
  27. 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 !
  28. SoluNons Cloud • Basé sur Kubernetes • Azure: AKS •

    AWS: EKS • Google: GKE • Basée sur des conteneurs • Azure Container App • AWS Fargate • Digital Ocean App Plateform