Oxalide Workshop #4 - Docker, des tours dans le petit bassin
4ème workshop @Oxalide, animé par Julien Follenfant, 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 (@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
3. 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
4. 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
5. 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
10. 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
13. 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
15. 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
16. 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
18. 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
restartCommit
19. 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
21. 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 :-)
22. Premier build de container
Dockerfile
jfo@lab ~/oxatest
$ vim Dockerfile
FROM debian
MAINTAINER jfollenfant <jfo@oxalide.com>
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 Oxaliden”; ?>
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
23. 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”
24. 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
26. 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
27. 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
31. 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
32. 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 !
33. 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
34. 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
35. 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
36. 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.
39. 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
40. 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
43. 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
44. 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
45. 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
46. 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
47. 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
48. 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
49. 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
57. 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/)