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

Oxalide Workshop #4 - Docker, des tours dans le petit bassin

Oxalide Workshop #4 - Docker, des tours dans le petit bassin

Oxalide Workshop #4 - Docker, des tours dans le petit bassin

4ème workshop @Oxalide, animé par Julien Follenfant (@jf_flyn), Théo Chamley (@MrTrustor) et Ludovic Piot (@lpiot), le 24 mai 2016.
Une entrée en matière sur la technologie Docker et son écosystème à date : pourquoi un tel engouement, à quel point Docker s'inscrit parfaitement dans la démarche DevOps…

Un TP sur le montage d'un cluster ElasticSearch avec le Dockerfile.
Une démo de kubernetes.

Subject: Oxalide's workshop about an overview of Docker and its ecosystem.
Date: 24-mai-2016
Speakers: Julien Follenfant (@jf_flyn, @Oxalide), Théo Chamley (@MrTrustor, @Oxalide) and Ludovic Piot (@lpiot, @Oxalide)
Language: french

Lien SpeakerDeck : https://speakerdeck.com/lpiot/oxalide-workshop-number-4-docker-des-tours-dans-le-petit-bassin
Lien SlideShare : http://www.slideshare.net/LudovicPiot/workshop-4-docker-des-tours-dans-le-petit-bassin
YouTube Video capture: https://youtu.be/xJuRS6QYAAk

Main topics:
* Introduction 15 min (Ludovic Piot)
** D’où vient Docker ?
** Les principales caractéristiques de Docker
*** POrtable (package)
*** DIsposable (cattle vs. pet)
*** LIve (git style)
*** SOcial (registry / Github style)
* Hands-on #1 - Mon premier container (Julien Follenfant 35 min)
** Un tour d’horizon de DockerHub
** Installation de Docker Toolbox
** Création d’un Dockerfile (outil stand-alone)
** Introspecter un container
** Configurer un container
** Monter un cluster Elasticsearch 3 nœuds
* Comment ça marche ? (Théo Chamley 20 min)
** Namespaces & cgroups
** Layered FS (les poupées russes)
** Cache Image
** Networking
** Volumes
* Nouvelles collaborations (Ludovic Piot 10 min)
** CaaS (infra + cluster de containers vs. containers + appli)
* Ecosystème 20 min
** Les produits Docker, inc. (Ludovic Piot)
** Les alternatives (CoreOS, OpenContainer Initiative, Warden/Garden) (Ludovic Piot)
** La registry (Docker Registry, Nexus) (Ludovic Piot)
** L’autodiscovery (Consul, etcd, ZooKeeper) (Ludovic Piot)
** Les composants réseaux (haproxy, traefik, zipnish) (Julien Follenfant)
** Les orchestrateurs (kubernetes (Théo Chamley), Mesos/Marathon, Swarm, Fleet) (Ludovic Piot)
** Les solutions PaaS/CaaS intégrées (OpenShift, Rancher (Théo Chamley), Deis, CloudFoundry) => screenshots (Ludovic Piot)
** Les services de cloud publics (AWS ECS et ECR, GKE) (Ludovic Piot)
* Demo - utilisation de Kubernetes 15 min (Théo Chamley)
* Questions / Réponses

Ludovic Piot

May 24, 2016
Tweet

More Decks by Ludovic Piot

Other Decks in Technology

Transcript

  1. Workshop #4 Docker, des tours dans le petit bassin… Le

    24-mai-2016 – Théo Chamley, Julien Follenfant & Ludovic Piot
  2. Workshop #4 - Docker, des tours dans le petit bassin…

    Les événements Oxalide… • Objectif : présentation d’une thématique métier ou technique • Tout public : 80 à 100 personnes • Déroulé : 1 soir par trimestre de 18h à 21h • Introduction de la thématique par un partenaire • Tour de table avec des clients et non clients • Echange convivial autour d’un apéritif dînatoire • Objectif : présentation d’une technologie • Réservé aux clients : public technique avec laptop – 30 personnes • Déroulé : 1 matinée par trimestre de 9h à 13h • Présentation de la technologie • Tuto pour la configuration en ligne de commande • Objectif : présentation d’un outil • Réservé aux clients : 30 personnes • Déroulé : 1 soir par trimestre de 18h à 21h • Démonstration des fonctionnalités de l’outil • Echange convivial autour de pizzas Apérotech Workshop Pizza’n’Tools
  3. Workshop #4 - Docker, des tours dans le petit bassin…

    Les speakers… Julien Follenfant Customer Team 01 @ Oxalide Théo Chamley Conseil / Archi / DevOps @ Oxalide @MrTrustor Ludovic Piot Conseil / Archi / DevOps @ Oxalide @lpiot
  4. Présentation de Docker Hands-on #1 : mon premier container Comment

    ça marche ? Les nouvelles collaborations Ecosystème Démo : découverte de Kubernetes Questions & réponses ? 1 3 2 4 5 6 7
  5. Présentation de Docker Qu’est-ce que Docker ? le container Linux

    Docker enveloppe logique isolant… un ou plusieurs processus… en exécution décrit le contenu du container décrit l’interface entre le container et son hôte gère le cycle de vie du container : build / package / deploy / run / kill
  6. Présentation de Docker POrtable Disclaimer ! On est dans le

    chapitre POrtable, mais je ne vais pas parler de Docker sur Ms Windows Server
  7. Présentation de Docker POrtable Mise en œuvre facile partage peu

    de choses avec l’ hôte, mis à part le kernel s’appuie sur les fonctionnalités natives du kernel Linux produit stand-alone écrit en Go. peu d’adhérence avec les autres containers : incompatibilités limitées overhead quasi-inexistant peu de configuration pour être opérationnel Hardware Hardware / VM Hypervisor Linux Kernel VM OS Libs Middlewa res conf. Apps Kernel HDW conf. conf. Container OS Libs Middlewa res conf. Apps conf. conf. VM OS Libs Middlewa res conf. Apps Kernel HDW conf. conf. Container OS Libs Middlewa res conf. Apps conf. conf. Virtualization Isolation Container Runtime architecture microservices
  8. Présentation de Docker DIsposable Cattle vs. Pet build du container

    décrit dans Dockerfile déploiement par docker pull Docker est une technologie de packaging et déploiement Infra as Code Immutable Infrastructure : build & replace vs. upgrade
  9. Présentation de Docker DIsposable… oui mais… Par nature, un container

    éteint perd ses données. Persister les données est un sujet : • utiliser un mécanisme applicatif (ELK) • utiliser un stockage tiers (base de données, object storage) • monter des volumes du host dans les containers Docker L’application embarquée dans le container doit être “distribuée” par nature (twelve- factor app) : • tolérance à la panne (load-balancing) • pas de session stickyness • compatible blue/green La plateforme Docker doit être résiliente
  10. Présentation de Docker LIve Git style Images versionnées API à

    la git : • diff • commit • tag • history Images incrémentales multi-layered filesystem Image Build Run start / stop restart Commit
  11. Présentation de Docker SOcial Github style dépôts d’images Docker registries

    Dépôt public et communautaire Docker Hub Votes pour les images Images officielles / trusted Outil de build continu Outil de diagnostic continu Docker Security Scanning
  12. Prérequis Docker toolbox Download & install for Windows or Mac

    OS https://www.docker.com/products/docker-toolbox Check de l’installation Et votre premier docker run :-)
  13. Premier build de container Dockerfile jfo@lab ~/oxatest $ vim Dockerfile

    FROM debian MAINTAINER jfollenfant <[email protected]> ADD ./hello.php / RUN apt-get update RUN apt-get -y install php5-cli CMD php /hello.php && echo $ENV jfo@lab ~/oxatest $ vim hello.php <?php echo “hello from Oxalide\n”; ?> jfo@lab ~/oxatest $ docker build -t hello-oxa . [...] building image…. jfo@lab ~/oxatest $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-oxa latest 7c3877476e31 About a minute 198 MB Sources Dockerfile + hello world en PHP Build d’une image ready to run. Déroulement des commandes du hands on disponible sur : http://tinyurl.com/j2yp857
  14. Pour aller plus loin Elasticsearch cluster dockerized $ docker run

    -d --name es-01 -p 9201:9200 -d elasticsearch:1.7.5 elasticsearch -Des.node.name=”es-01” $ docker run -d --name es-02 -p 9202:9200 -d elasticsearch:1.7.5 elasticsearch -Des.node.name=”es-02” $ docker run -d --name es-03 -p 9203:9200 -d elasticsearch:1.7.5 elasticsearch -Des.node.name=”es-03”
  15. Use it, break it, fix it, trash it, change it.

    Elasticsearch cluster dockerized Elasticsearch autodiscovery entre les 3 containers $ docker exec -it es-01 plugin install lmenezes/elasticsearch-kopf/v1.6.1 Accès depuis un navigateur : http://192.168.99.100:9201/_plugin/kopf Execution de commandes à l’intérieur d’un container en état RUNNING
  16. Comment ça marche ? Namespaces & cgroups A namespace wraps

    a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. Namespaces cgroups (abbreviated from control groups) is a Linux kernel feature that limits, accounts for, and isolates the resource usage (CPU, memory, disk I/O, network, etc.) of a collection of processes. Cgroups
  17. Comment ça marche ? Layered FS - Poupées russes •

    Toutes les écritures sur le layer Container (R/W) • Mutualisation des datas R/O entre les containers • Copy-on-Write • Réutilisation des layers avec le mot clé “FROM” dans les Dockerfiles
  18. Comment ça marche ? Layered FS - Exemple $ docker

    pull ubuntu:16.04 16.04: Pulling from library/ubuntu 6d28225f8d96: Downloading [=========================> ] 30.96 MB/48.35 MB 166102ec41af: Download complete d09bfba2bd6a: Download complete c80dad39a6c0: Download complete a3ed95caeb02: Download complete $ docker history ubuntu:16.04 IMAGE CREATED CREATED BY SIZE c5f1cf30c96b 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 2 weeks ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB <missing> 2 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B <missing> 2 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 701 B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:ffc85cfdb5e66a5b4f 120.8 MB A comparer avec le Dockerfile : http://bit.ly/1WDZmHm
  19. Comment ça marche ? Build cache FROM ubuntu:16.04 RUN apt-get

    update && apt-get install -y curl ADD foo / CMD ["/bin/bash"] 3 layers, en cache FROM ubuntu:16.04 RUN apt-get update && apt-get install -y curl ADD foo / ADD bar / CMD ["/bin/bash"] Réutilisation des 2 premiers layers Création de 2 nouveaux layers Pour ADD et COPY : → Checksum du fichier
  20. Comment ça marche ? Build cache - Attention ! FROM

    ubuntu:16.04 RUN apt-get update RUN apt-get install -y curl CMD ["/bin/bash"] 3 layers, en cache FROM ubuntu:16.04 RUN apt-get update RUN apt-get install -y curl nginx CMD ["/bin/bash"] Réutilisation du layer “apt-get update” → apt cache pas à jour !
  21. Comment ça marche ? Networking Plugin par défaut : bridge

    → Interface docker0 • Communication avec les autres containers du même host • Links entre les containers Discovery : → Entrée dans le /etc/hosts → Variables d’environnement → Serveur DNS interne au Docker Daemon $ docker run -d --name db training/postgres $ docker run -d -P --name web --link db:db training/webapp python app.py
  22. Comment ça marche ? Networking - Multi-hosts Comment faire communiquer

    des containers sur des hosts différents ? The Docker Way : network plugin overlay $ docker network create \ --driver overlay multi-host-net $ docker run -itd \ --net=multi-host-net busybox • Encapsulation du trafic • backend k/v : Consul, etcd, Zookeeper The Not-Docker (i.e CoreOS/Kubernetes) Way : flanneld • Un subnet par host • Une IP par container/pod → pas de problème de ports • Encapsulation par défaut, intégration GCP et AWS • k/v backend : etcd
  23. Comment ça marche ? Volumes → Seul le container dbstore

    doit être persisté ! Comment gérer les données à l’intérieur d’un container ? $ docker run -P --name web -v /data/images:/var/www/mon_app/images mon_app $ docker run -P --name web -v /conf/app.conf:/var/www/mon_app/app.conf mon_app L’option --volumes-from permet de gérer les données comme un container : $ docker create -v /dbdata --name dbstore postgres /bin/true $ docker run -d --volumes-from dbstore --name db1 postgres $ docker run --rm --volumes-from dbstore \ -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
  24. Comment ça marche ? Volumes - Multi-hosts Comment faire pour

    que la donnée suive le container (i.e haute disponibilité) ? Docker Plugins ! • Le volume n’est pas forcément stocké en local sur le host. • Il existe des plugins pour : ◦ AWS EBS ◦ Ceph ◦ GlusterFS ◦ NFS ◦ NetApp ◦ iSCSI ◦ … Le plugin Flocker (https://github.com/ClusterHQ/flocker) regroupe un certain nombre de backends.
  25. Les nouvelles collaborations Docker, pivot du DevOps… Dev (apps team)

    Ops (infra team) gère et opère ce qu’il y a dans le container build le container ne se préoccupe pas de la plateforme sur laquelle run le container fournit la plateforme hébergeant les containers on-demand gère et opère les plateformes hébergeant les containers gère la sécurité de la plateforme contre l’intrusion fournit des dépôts d’images durcies et prêtes à l’emploi gère la scalabilité et la multi- tenancy de la plateforme
  26. Cloud Service What we get… What we do… IaaS Infrastructure

    resources (compute / storage / network) VMs marketplace VM / network / storage provisionning CaaS Platform dedicated to container run Container marketplace Environment provisionning Container deployment (OS / middleware / app) PaaS Vertical stacks dedicated to programmation languages Vertical stack / middleware marketplace Environment provisionning Application deployment SaaS End-user services Use of services Les nouvelles collaborations IaaS, CaaS, PaaS, SaaS… Hardware / VM Linux Kernel Container OS Libs Middle wares conf. Apps conf. conf. Container OS Libs Middle wares conf. Apps conf. conf. Container Runtime Hardware Hypervisor VM OS Libs Middle wares conf. Apps Kernel HDW conf. conf. VM OS Libs Middle wares conf. Apps Kernel HDW conf. conf. IaaS PaaS SaaS CaaS PaaS
  27. Ecosystème Le bestiaire Docker Docker Engine expose l’API de gestion

    du container s’appuie sur containerd et runC depuis Docker 1.11 runC runC runC Docker Engine warden/garden des alternatives existent : • Rocket chez CoreOS • Garden chez CloudFoundry portée par la Linux Foundation
  28. Ecosystème Le bestiaire Docker Docker Compose décrit le provisionning d’un

    service composé de multiples containers gère les dépendances entre containers Docker Engine gestion limitée à un seul host préserve les données des volumes à la création des containers limite l’update de la stack aux seuls containers modifiés permet d’isoler de multiples envs. sur un même hôte
  29. Ecosystème Le bestiaire Docker Docker Machine décrit le provisionning de

    multiples hôtes Docker architecturé autours de plugins gère les principaux services IaaS et virtualisation (~25) utilisé au sein de Docker Toolbox gère le déploiement de clusters Docker Swarm
  30. Ecosystème Les dépôts Docker Hub dépôt public d’images Docker images

    officielles images de confiance (Notary) Mécanismes de vote Mécanismes de build continu Audit de sécurité (Nautilus) 4 registries comparées (Rancher) : http://goo.gl/eNomg4
  31. Ecosystème L’autodiscovery la configuration du container varie selon : •

    l’env. (ex. : dev / prod) • l’hôte (ex. : port, ip) • la version (ex. : URI) • le nb. d’instances (ex. : ASG) • les autres containers (ex. : DB) injection de configuration au run : • docker -e myVAR=’myValue’ • docker compose configuration dynamique : • stockage distribué • résilient (au partitionnement réseau) • API CRUD • healthcheck • accès DNS
  32. Ecosystème Les composants réseaux Smart load balancers HAproxy : No

    hot reload, rechargement de configurations via adapter consul Traefik : support multi backends natif ( etcd, consul, zookeeper, swarm… ) Advanced HTTP features SSL self managed, HTTP/2 Docker Engine Pilotage via API REST Gestion avancée du trafic graceful shutdown, retry request et coupe circuit
  33. Ecosystème L’orchestration Gestion d’une population (nombreuse) de containers : •

    placement sur un hôte (dispo de ressources, affinité) • élasticité • fail-over (perte de l’hôte) • fail-over (perte d’un container) • dépendances (service multi- containers) • exposition réseau du service Fleet
  34. Ecosystème Les solutions PaaS/CaaS refactoring des solutions de PaaS historiques

    émergence de pure players CaaS extension de solutions de clouds publics pour gérer les containers
  35. Workshop #4 - Docker, des tours dans le petit bassin…

    Références Slide decks : Arnaud Mazin et Adrien Blind (http://fr.slideshare.net/adrienblind/docker-redistributing-devops-cards-on-the-way-to-paas) Arnaud Mazin et Edouard Devouge - Orchestrator Feature Comparison (http://blog.octo.com/docker-en-production-la-bataille-sanglante-des- orchestrateurs-de-conteneurs/) Docker Survey 2016 (https://www.docker.com/survey-2016) Crédits graphiques : Google Images… http://techfree.com.br/2015/04/criacao-automatizada-de-imagens-docker-github-e-docker-hub/ http://blog.xebia.com/security-is-maturing-in-the-docker-ecosystem/ bestiaire Docker : Laurel (https://twitter.com/laurelcomics et https://bloglaurel.com/)
  36. Oxalide © 2015 – Documents confidentiels Ou contactez directement :

    Maxime KURKDJIAN – Directeur associé Tel : +33 1 75 77 16 58 / mku Sébastien LUCAS – Directeur associé Tel : +33 1 75 77 16 59 / [email protected] Siège social & NOC : 25 Boulevard de Strasbourg – 75010 Paris Tel : +33 1 75 77 16 66 e-mail : [email protected] Oxalide © 2015 – Documents confidentiels