Oxalide Workshop #4 - Docker, des tours dans le petit bassin
-
Upload
oxalide -
Category
Technology
-
view
1.940 -
download
4
Transcript of Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Workshop #4
Docker,des tours dans le petit bassin…
Le 24-mai-2016 – Théo Chamley, Julien Follenfant & Ludovic Piot
Evénementsles différents événements Oxalide
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
Workshop #4 - Docker, des tours dans le petit bassin…
Les speakers…
Julien FollenfantCustomer Team 01
@ Oxalide
Théo ChamleyConseil / Archi / DevOps
@ Oxalide
@MrTrustor
Ludovic PiotConseil / Archi / DevOps
@ Oxalide
@lpiot
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
Présentation de Docker
Présentation de Docker
Qu’est-ce que Docker ?
Présentation de Docker
Métaphore… avant
Présentation de Docker
Métaphore… après…
Présentation de Docker
Qu’est-ce que Docker ?
le container Linux Dockerenveloppe 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
Présentation de Docker
Principales qualités de Docker ?
POrtable
DIsposable
LIve
SOcial
Présentation de Docker
POrtable
Disclaimer !
On est dans le chapitre POrtable, mais je ne vais pas parler de
Docker sur Ms Windows Server
Présentation de Docker
POrtable
Mise en œuvre facilepartage 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
Middlewares
conf
.
Apps
Kernel
HDW
conf
.co
nf.
Container
OS
Libs
Middlewares
conf
.
Apps
conf
.co
nf.
VM
OS
Libs
Middlewares
conf
.
Apps
Kernel
HDW
conf
.co
nf.
Container
OS
Libs
Middlewares
conf
.
Apps
conf
.co
nf.
Virtualization Isolation
Container Runtime
architecture microservices
Présentation de Docker
POrtable… meet the market…
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
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
Présentation de Docker
DIsposable… meet the market…
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
Présentation de Docker
SOcial
Github styledépôts d’imagesDocker registries
Dépôt public et communautaireDocker Hub
Votes pour les images
Images officielles / trusted
Outil de build continu
Outil de diagnostic continuDocker Security Scanning
Hands-on #1Mon premier container
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 :-)
Premier build de container
Dockerfile
jfo@lab ~/oxatest$ vim Dockerfile
FROM debianMAINTAINER jfollenfant <[email protected]>ADD ./hello.php /RUN apt-get updateRUN apt-get -y install php5-cliCMD 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 SIZEhello-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
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”
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
Comment ça marche ?
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
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
Comment ça marche ?
Layered FS
Comment ça marche ?
Layered FS - Exemple
$ docker pull ubuntu:16.0416.04: Pulling from library/ubuntu6d28225f8d96: Downloading [=========================> ] 30.96 MB/48.35 MB166102ec41af: Download completed09bfba2bd6a: Download completec80dad39a6c0: Download completea3ed95caeb02: Download complete
$ docker history ubuntu:16.04IMAGE 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
Comment ça marche ?
Layered FS
Comment ça marche ?
Build cache
FROM ubuntu:16.04RUN apt-get update && apt-get install -y curlADD foo /CMD ["/bin/bash"]
3 layers, en cache
FROM ubuntu:16.04RUN apt-get update && apt-get install -y curlADD 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
Comment ça marche ?
Build cache - Attention !
FROM ubuntu:16.04RUN apt-get updateRUN apt-get install -y curlCMD ["/bin/bash"]
3 layers, en cache
FROM ubuntu:16.04RUN apt-get updateRUN apt-get install -y curl nginxCMD ["/bin/bash"]
Réutilisation du layer “apt-get update”→ apt cache pas à jour !
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
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
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
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.
Les nouvelles collaborations
Les nouvelles collaborations
Build / Ship / Run
DEV OPS
Ephemeral Envs
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
Cloud Service What we get… What we do…
IaaSInfrastructure resources (compute / storage / network)VMs marketplace
VM / network / storage provisionning
CaaSPlatform dedicated to container runContainer marketplace
Environment provisionningContainer deployment (OS / middleware / app)
PaaSVertical stacks dedicated to programmation languagesVertical stack / middleware marketplace
Environment provisionningApplication deployment
SaaS End-user services Use of services
Les nouvelles collaborations
IaaS, CaaS, PaaS, SaaS…
Hardware / VM
Linux Kernel
Container
OSLibs
Middlewares
conf
.
Apps
conf
.co
nf.
Container
OSLibs
Middlewares
conf
.
Apps
conf
.co
nf.
Container Runtime
Hardware
Hypervisor
VM
OSLibs
Middlewares
conf
.
Apps
KernelHDW
conf
.co
nf.
VM
OSLibs
Middlewares
conf
.
Apps
KernelHDW
conf
.co
nf.
Iaa
SP
aa
S Sa
aS
Ca
aS
Pa
aS
Les nouvelles collaborations
DevOps… meet the market…
Ecosystème
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/gardendes alternatives existent :● Rocket chez CoreOS● Garden chez CloudFoundry
portée par la Linux Foundation
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
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
Ecosystème
Les dépôts
Docker Hub
dépôt public d’images Docker
images officiellesimages 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
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
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
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
Ecosystème
L’orchestration
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
Ecosystème
Rancher
Ecosystème
Deis
Démodécouverte de Kubernetes
Demo Kubernetes
L’architecture
Questions & réponses
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/)
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 66e-mail : [email protected]
Oxalide © 2015 – Documents confidentiels