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

Docker, ça mange quoi au printemps

Docker, ça mange quoi au printemps

Conférence présenter au Web à Québec 2017

Présentation rapide de Docker et des différents outils disponible fait par Docker (Docker Compose, Swarm, Registry, etc).

Julien Maitrehenry

April 24, 2018
Tweet

More Decks by Julien Maitrehenry

Other Decks in Technology

Transcript

  1. DOCKER, ÇA MANGE QUOI AU
    PRINTEMPS ?
    Introduction à Docker et son écosystème

    View full-size slide

  2. QUI SUIS-JE ?
    Julien Maitrehenry
    DevOps at PetalMD
    jmaitrehenry.ca

    https://github.com/jmaitrehenry

    @jmaitrehenry

    View full-size slide

  3. AGENDA
    ▸ Le problème initial
    ▸ Mais qu’est-ce que Docker ?
    ▸ L’écosystème
    ▸ Quelques cas d’usage
    ▸ Démo

    View full-size slide

  4. LE PROBLÈME

    View full-size slide

  5. LE PROBLÈME - QUOI QUI VA OÙ ?

    View full-size slide

  6. LE PROBLÈME - LA MATRICE DE LA MORT

    View full-size slide

  7. LE PROBLÈME DU TRANSPORT PRE-1960

    View full-size slide

  8. LE PROBLÈME - UNE AUTRE MATRICE

    View full-size slide

  9. LA SOLUTION - LE CONTENEUR

    View full-size slide

  10. LE SOLUTION - LE CONTAINER DOCKER

    View full-size slide

  11. MATRICE RÉGLÉ !

    View full-size slide

  12. QU’EST-CE
    DOCKER ?
    On est là pour ça
    après tout !

    View full-size slide

  13. QU’EST-CE DOCKER ?
    Docker est la principale plateforme pour les conteneurs
    Développeurs Utilise Docker pour éliminer le problème du “ça marche sur mon poste”
    Admin Système
    Utilise Docker pour rouler et gérer des apps fonctionnant côte à côte
    dans des conteneurs isolées
    Entreprise
    Utilise Docker pour construire des pipelines agiles pour livrer de
    nouvelles fonctionnalités plus rapidement, plus sécuritaire, plus
    facilement scalable et avec une plus grande confiance

    View full-size slide

  14. ÉVOLUTION DE LA PLATEFORME DOCKER
    ▸ Un seul but
    ▸ Communauté des développeurs

    sous linux seulement

    View full-size slide

  15. ÉVOLUTION DE LA PLATEFORME DOCKER
    Développeurs Ops Entreprises Ecosystème
    Besoin d’expérimenter 

    et d’innover avec des
    technologies à jour
    Besoin d’un système
    prévisible pour
    déployer et faire
    tourner des apps
    Fait tourner des apps
    business critiques
    scalable et n’importe

    Ajouter de la valeur et
    étendre une
    plateforme avec un
    moyen commun de
    monétisation

    View full-size slide

  16. LA PLATEFORME DOCKER
    Développeurs Ops Entreprises Ecosystème
    Une plateforme
    Pour les développeurs et les équipes TI
    Sur Linux et Windows
    On premise et dans le nuage
    Apps traditionnelles, vendeur de solution, microservices

    View full-size slide

  17. DOCKER COMMUNITY EDITION (CE) ET DOCKER ENTERPRISE EDITION (EE)
    ▸ Plateforme Docker gratuite 

    pour les Devs et Ops “do it yourself”
    ▸ Release mensuelle avec les dernières

    fonctionnalités pour les développeurs
    ▸ Release trimestrielle avec maintenance

    pour les Ops
    ▸ Plateforme CaaS avec un abonnement

    (inclue l’orchestration des containers, 

    la gestion et la sécurité)
    ▸ Support de niveau entreprise
    ▸ Release trimestrielle avec 1 ans de 

    support chaque incluant les patches et 

    hotfixes
    ▸ Technologie certifiée: Infrastructure, 

    plugins et container

    View full-size slide

  18. VERSIONS ET SUPPORT
    ▸ NEW! Les versions de Docker suit maintenant le format YY.MM
    ▸ `docker-engine` package n’existe plus, c’est maintenant `docker-ce` et `docker-ee`

    View full-size slide


  19. C’est cool tout ça, mais c’est quoi
    Docker ?
    -Un anonyme

    View full-size slide

  20. QU’EST-CE QU’UN CONTENEUR ?
    ▸ Packaging standardisé pour les apps
    et leurs dépendances
    ▸ Isole les apps l’une de l’autre
    ▸ Partage le même Kernel que l’OS
    ▸ Fonctionne sur les principales
    distributions Linux
    ▸ Natif dans Windows Server 2016

    View full-size slide

  21. LA DIFFÉRENCE ENTRE UN CONTENEUR ET UNE VM
    Un conteneur est un élément
    au niveau applicatif
    Une VM est un élément au niveau 

    de l’infrastructure

    View full-size slide

  22. CONTENEURS ET VMS ENSEMBLE
    L’utilisation des conteneurs et des VMs permet une plus grande flexibilité

    pour déployer et gérer des apps de manière optimale

    View full-size slide


  23. Mais en plus concret, c’est quoi un
    container ?
    -Un autre anonyme

    View full-size slide

  24. C’EST UNE IMAGE AVEC
    UN LAYER EN R/W

    View full-size slide


  25. Heu… une image ? Un layer ?
    -Le même anonyme

    View full-size slide

  26. IMAGE
    ▸ Une image est une référence à une liste de layer en “read only”
    ▸ Les layers sont stacké l’un au dessus de l’autre pour former le
    filesystem
    ▸ Chaque layers peuvent être utilisé par plusieurs images
    ▸ Le driver de stockage de Docker est responsable de stacké les
    images et de fournir une vue unifié

    View full-size slide

  27. CONSTRUIRE UNE IMAGE
    FROM mhart/alpine-node:6
    ENV SERVICE_3000_NAME selfpro
    WORKDIR /src
    ADD . .
    RUN apk add --update --no-cache git && \

    npm install
    EXPOSE 3000
    CMD npm start
    Dockerfile

    View full-size slide

  28. CONSTRUIRE UNE IMAGE
    ~/work/selfpro  docker build -t petalmd/selfpro -f docker/Dockerfile .
    Sending build context to Docker daemon 1.398 MB
    Step 1 : FROM mhart/alpine-node:6
    ---> 2e8721f40082
    Step 2 : ENV SERVICE_3000_NAME selfpro
    ---> Running in cd8e6156fbec
    ---> 9d9b1f86a696
    Removing intermediate container cd8e6156fbec
    [...]
    Step 7 : CMD npm start
    ---> Running in 71bab8276b39
    ---> cce4c583c3a0
    Removing intermediate container 71bab8276b39
    Successfully built cce4c583c3a0

    View full-size slide

  29. CONSTRUIRE UNE IMAGE
    ~/work/selfpro  docker history cce4c583c3a0
    IMAGE CREATED CREATED BY SIZE
    cce4c583c3a0 2 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "npm s 0 B
    110c49285fe1 2 minutes ago /bin/sh -c #(nop) EXPOSE 3000/tcp 0 B
    579469b24848 2 minutes ago /bin/sh -c apk add --update --no-cache git && 54.16 MB
    5b34c5ef9a7f 3 minutes ago /bin/sh -c #(nop) %s %s in %s ADD dir:b07dd1 1.044 MB
    6ba4a61f509a 3 minutes ago /bin/sh -c #(nop) WORKDIR /src 0 B
    9d9b1f86a696 3 minutes ago /bin/sh -c #(nop) ENV SERVICE_3000_NAME=self 0 B
    2e8721f40082 3 weeks ago /bin/sh -c apk add --no-cache curl make gcc g 41.44 MB
    3 weeks ago /bin/sh -c #(nop) ENV VERSION=v6.2.1 NPM_VERS 0 B
    3 weeks ago /bin/sh -c #(nop) ADD file:701fd33a2f463fd4bd 4.799 MB
    ~/work/selfpro  docker history petalmd/selfpro

    View full-size slide

  30. AVANTAGES DES IMAGES
    ▸ Chaque layers peuvent être utilisé par plusieurs images
    ▸ Une image peut être construite au dessus d’une autre image
    ▸ Un site static peut être construit par dessus l’image de nginx,
    qui peut, elle même être construit par dessus alpine Linux
    ▸ Construire une image peut se résumer à juste reconstruire le
    dernier layer

    View full-size slide

  31. EXEMPLE D’IMAGE
    /bin/sh -c #(nop) ADD file:614a9122187935fccf 4.797 MB
    addgroup -S redis && adduser -S -G […]
    apk add --no-cache ‘su-exec>=0.2' […]
    ENV REDIS_VERSION=3.2.1
    CMD ["redis-server"]
    [9 other layers]
    MAINTAINER NGINX Docker Maintainers
    ENV NGINX_VERSION=1.11.1
    EXPOSE 443/tcp 80/tcp
    CMD ["nginx" "-g" "daemon off;”] 0 B
    [5 other layers]
    alpine:3.3
    redis:alpine nginx:alpine

    View full-size slide

  32. DOCKER ECOSYSTÈME

    View full-size slide

  33. DOCKER ENGINE
    ▸ Client-Server application qui permet:
    ▸ 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

  34. DOCKER COMPOSE
    ▸ Définie une application multi-
    containers utilisants plusieurs
    dépendances dans un seul fichier
    ▸ Contient la structure et la
    configuration en une place
    ▸ Démarre (ou arrête) une application
    en une seul command

    View full-size slide

  35. DOCKER COMPOSE
    Containers
    Gestion des dépendances

    View full-size slide

  36. DEMO
    ~/work/wordpress  docker-compose up -d
    Creating network "wordpress_default" with the default driver
    Creating volume "wordpress_db_data" with default driver
    Creating wordpress_mysql_1
    Creating wordpress_wordpress_1
    ~/work/wordpress  docker-compose ps
    Name Command State Ports
    -------------------------------------------------------------------------------------
    wordpress_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp
    wordpress_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp

    View full-size slide

  37. DOCKER REGISTRY
    ▸ Stock et distribue les images Docker
    ▸ De nombreux Registry hébergés
    disponibles:
    ▸ Docker Hub, AWS ECR, …
    ▸ Peut être self-hosted avec plusieurs
    intégrations pour le stockage:
    ▸ Local, AWS S3, Ceph, OpenStack
    Swift, …

    View full-size slide

  38. DOCKER MACHINE
    ▸ Provisionne et configure Docker sur
    un serveur distant
    ▸ Fonctionne avec la plus part des
    cloud providers
    ▸ AWS / GCE / Azure / DO / IBM
    ▸ Fonctionne aussi avec des
    technologies standards
    ▸ OpenStack / vCenter

    View full-size slide

  39. DOCKER MACHINE
    ~/work  docker-machine create \
    --driver digitalocean \
    --digitalocean-size 1gb \
    --digitalocean-region tor1 \
    --digitalocean-access-token xxx
    Running pre-create checks...
    Creating machine...
    (swarm1) Creating SSH key...
    (swarm1) Creating Digital Ocean droplet...
    (swarm1) Waiting for IP address to be assigned to the Droplet...
    Waiting for machine to be running, this may take a few minutes...
    Detecting operating system of created instance...
    Waiting for SSH to be available...
    Detecting the provisioner...
    Provisioning with ubuntu(systemd)...
    Installing Docker...
    Copying certs to the local machine directory...
    Copying certs to the remote machine...
    Setting Docker configuration on the remote daemon...
    Checking connection to Docker...
    Docker is up and running!
    To see how to connect your Docker Client to the Docker Engine running on this
    virtual machine, run: docker-machine env swarm1
    ~/work  eval $(docker-machine env swarm1)
    ~/work  docker info
    CPUs: 1
    Total Memory: 992.4MiB
    Name: swarm1
    Labels:
    provider=digitalocean

    View full-size slide

  40. DOCKER SWARM
    ▸ Transforme un groupe de serveurs docker en
    un cluster
    ▸ Gestion du cluster inclue dans le Docker
    Engine
    ▸ Décentralisé
    ▸ Declarative service model
    ▸ Scaling
    ▸ Secure by default
    ▸ Service discovery
    ▸ Multi-host networking
    ▸ Rolling Update

    View full-size slide

  41. DOCKER SWARM
    ~/work  docker swarm init --advertise-addr 138.197.149.25
    Swarm initialized: current node (fymao87flfrbkstg7gyzdx4ov) is now a manager.
    To add a worker to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-0vy0ta7rz8t1sblq3o63s83nvnhy7ddxyczp4w50hs9dipbpg6-xx \
    138.197.149.25:2377
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow
    the instructions.

    View full-size slide

  42. DOCKER SWARM
    ~/work  docker swarm join \
    --token SWMTKN-1-0vy0ta7rz8t1sblq3o63s83nvnhy7ddxyczp4w50hs9dipbpg6-xx \
    138.197.149.25:2377
    This node joined a swarm as a worker.
    ~/work  docker node ls
    ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
    c2lyl7ail0r68c141zidbovpl swarm2 Ready Active
    fymao87flfrbkstg7gyzdx4ov * swarm1 Ready Active Leader

    View full-size slide

  43. DOCKER CLOUD
    ▸ Solution commerciale de Docker
    pour faire des pipelines de CI / CD
    ▸ Se hook sur Github et Bitbucket pour
    construire des images et les
    déployer automatiquement
    ▸ Utilise nos serveurs ou se branche
    sur des cloud providers
    ▸ Facturation par node par heure

    View full-size slide

  44. USE CASE
    Mais comment ça peut m’être
    utile ?

    View full-size slide

  45. CONTINUOUS INTEGRATION

    View full-size slide

  46. CONTINUOUS INTEGRATION
    Jenkins Master Jenkins Slave Docker Registry
    • Jenkins in Docker
    • Auto provisionning
    • Only docker running
    on host
    • Jenkins agent running
    in Docker
    • For storing Docker
    image
    • Private or public
    • On promise or not

    View full-size slide

  47. CI / CD
    If the test is successful, 

    the image is pushed to the 

    Registry

    View full-size slide

  48. STAGING AUTO DEPLOYING WITH
    WORDPRESS

    View full-size slide

  49. STAGING AUTO DEPLOYING WITH WORDPRESS
    ▸ Construire une nouvelle version à chaque git push
    ▸ Construire une image pour Wordpress et une autre pour
    MySQL
    ▸ Déployer automatiquement à chaque build
    ▸ Avoir une URL utilisable

    View full-size slide

  50. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  51. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  52. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  53. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  54. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  55. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  56. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  57. STAGING AUTO DEPLOYING WITH WORDPRESS

    View full-size slide

  58. RESSOURCES
    ▸ Labs en ligne: https://training.docker.com/self-paced-online
    ▸ Utiliser docker en ligne: http://play-with-docker.com
    ▸ Communauté et channel slack: https://www.docker.com/
    docker-community
    ▸ Docker Meetup Québec: https://www.meetup.com/fr-FR/
    Docker-Quebec-Meetup/
    ▸ Docker Meetup Montréal: https://www.meetup.com/fr-FR/
    Docker-Montreal/

    View full-size slide

  59. ASK
    ALL THE QUESTIONS

    View full-size slide