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

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

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

Page 1: 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

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

Evénementsles différents événements Oxalide

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

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

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

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

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

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

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

Présentation de Docker

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

Présentation de Docker

Qu’est-ce que Docker ?

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

Présentation de Docker

Métaphore… avant

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

Présentation de Docker

Métaphore… après…

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

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

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

Présentation de Docker

Principales qualités de Docker ?

POrtable

DIsposable

LIve

SOcial

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

Présentation de Docker

POrtable

Disclaimer !

On est dans le chapitre POrtable, mais je ne vais pas parler de

Docker sur Ms Windows Server

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

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

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

Présentation de Docker

POrtable… meet the market…

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

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

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

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

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

Présentation de Docker

DIsposable… meet the market…

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

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

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

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

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

Hands-on #1Mon premier container

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

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 :-)

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

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

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

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”

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

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

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

Comment ça marche ?

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

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

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

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

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

Comment ça marche ?

Layered FS

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

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

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

Comment ça marche ?

Layered FS

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

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

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

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 !

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

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

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

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

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

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

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

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.

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

Les nouvelles collaborations

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

Les nouvelles collaborations

Build / Ship / Run

DEV OPS

Ephemeral Envs

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

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

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

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

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

Les nouvelles collaborations

DevOps… meet the market…

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

Ecosystème

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ecosystème

L’orchestration

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

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

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

Ecosystème

Rancher

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

Ecosystème

Deis

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

Démodécouverte de Kubernetes

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

Demo Kubernetes

L’architecture

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

Questions & réponses

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

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/)

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

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