47
Docker découverte

NightClazz Docker Découverte

  • Upload
    zenika

  • View
    520

  • Download
    0

Embed Size (px)

Citation preview

Docker découverte

Qui sommes nous ?

Mario [email protected]

github: l0rd@mariolet

Vincent [email protected]

github: vdemeester@vdemeest

© Copyright Zenika

Info pratiques

Programme de la soirée :

19h30­19h50 : Docker et VMs (20min)19h50­20h30 : Premier hands­on (40min)20h30­21h00 : Pizza (30min)21h00­21h30 : Patterns simples (30min)21h30­22h30 : Deuxieme hands­on (1h)

Vous avez des problèmes pour installer Docker ?Nous avons des clés USB

WiFi : ZenikaGuest/Welcome2Zenika!

© Copyright Zenika

Sommaire

Qu'est­ce que Docker ?

Comparaison avec les VMstraditionelles

Hands­on

Cycle de vie d'un conteneur

Patterns d'utilisation simples

Hands­on

© Copyright Zenika

Qu'est-ce que Docker ?

1

Docker timeline

Quelques dates :

­ mars 2013 : dotCloud rend disponible Docker en Open Source­ aout 2013 : eBay, Uber, Cloudfare utilisent Docker­ octobre 2013 : DotCloud devient Docker Inc.­ décembre 2013: Google Compute Engine supporte Docker­ avril 2014: Amazon Web Service supporte Docker

­ octobre 2014: Partnership avec Microsoft

Quelques chiffres :

­ 150+ Docker Meetup dans 50 pays

­ 18,000+ Github stars

­ 100M+ Docker Engine downloads

­ 730+ développeurs de la communauté ont contribué

© Copyright Zenika 1 ­ 1

Ok mais....

© Copyright Zenika 1 ­ 2

Quelques définitions

"Docker is an open platform for developers andsysadmins to build, ship, and run distributed applications."

docker.com

"Docker is an open­source project that automates thedeployment of applications inside software containers"

wikipedia.org

© Copyright Zenika 1 ­ 3

Une métaphore - le transport de conteneurs

© Copyright Zenika 1 ­ 4

Une métaphore - une révolution

© Copyright Zenika 1 ­ 5

Détails techniques - Architecture

Host

Container 1

Container 2

Container 3

Container ...

Docker Clientdocker pulldocker rundocker ...

Docker Index

Docker Daemon

© Copyright Zenika 1 ­ 6

Détails techniques - Isolation

"chroot on steroids"

© Copyright Zenika 1 ­ 7

Détails techniques : LXC vs Docker

Depuis v0.9 Docker ne dépend plus de LXC

Qu'est Docker apporte en plus de LXC ?

­ Build automatisé à partir du Dockerfile

­ Docker Hub

­ Ecosystème

­ Versioning des images

­ Images réutilisables comme base pout d'autres images

© Copyright Zenika 1 ­ 8

Détails techniques : Union mount

// Slice of drivers that should be used in an order priority = []string "aufs", "btrfs", "devicemapper", "vfs", "overlayfs"

© Copyright Zenika 1 ­ 9

Containers vs VM

2

Comparaison de l'architecture VM/Conteneur

© Copyright Zenika 2 ­ 1

Quand utiliser une VMs

Quand l'application dépend d'une version précise dukernel

Quand la sécurité du conteneur est importante

Sur Windows et Mac

© Copyright Zenika 2 ­ 2

Quand utiliser les deux ?

Sur Windows et Mac

Quand on veut reproduire un environement deprod

© Copyright Zenika 2 ­ 3

Quand utiliser un conteneur

Dans tous les autres cas ;­)

© Copyright Zenika 2 ­ 4

Hands-on n.1

3

Hands-on #0 : Configuration

Installer git

Cloner le repo [email protected]:Zenika/NC­Docker­Decouverte.git

Installer docker et autres outils

Ou bien simplement :

curl -sSL http://goo.gl/iRGzlj | bash

© Copyright Zenika 3 ­ 1

Hands-on #1 : Démarrer et arreter un conteneur

Démarrer un conteneur Docker à partir de l'image debian:jessie en ouvrant unshell bash en mode interactif

run options -t -i --rm

Démarrer un conteneur Docker à partir de l'image zenika/nodejs­sample­app:latest en mode detached pour démarrer un serveur nodejs

run option -d

Récuperer l'identifiant du conteneur (ps), et arretez­le (stop)

ps options

-a : liste tous les conteneurs (démarrés, arrétés ou en pause)

-l : liste uniquement le dernier container

© Copyright Zenika 3 ­ 2

Hands-on #2 : Conteneurs vs VMs - Resources

Démarrer 50 conteneur :

Vérifier les resouces utilisées avant et après (avec htop par exemple)

Utiliser l'image zenika/nodejs­sample­app:latest

En mode detached

Démarrer quelque VMs (qemu, virtualbox) et vérifier les resourcesutlisées

© Copyright Zenika 3 ­ 3

Hands-on #3 : Conteneurs vs VMs - Isolation

Chercher le PID des process nodejs des 50 conteneurs démarrés auparavant enutilsant la commande ps

Essayer de killer les process

Faire la même chose pour une VM

© Copyright Zenika 3 ­ 4

Cycle de vie

4

Cycle de vie

Registry (Distribution)

Liste d'images

Images (Construction)

Template

Lecture seule

Conteneurs (Runtime):

Basé sur uneimage

Dispose d'un état

© Copyright Zenika 4 ­ 1

Images (1/2)

Template multi­layer pour les conténeurs, héritage entre images

Place sur le disque : 258M

© Copyright Zenika 4 ­ 2

Images (2/2)

Commandes usuelles

images : liste les images disponible en local

search : effectue une recherge sur le hub d'images

rmi : supprime une image disponible en local

build : construit une image à partir d'un Dockerfile

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEdebian jessie b427819b829a 4 days ago 715.6 MB# […]

© Copyright Zenika 4 ­ 3

Dockerfile (1/2)

FROM debian:jessie # Basé sur DebianMAINTAINER John Doe <[email protected]>

RUN apt-get -y update # Une commandeRUN ["apt-get", "-y", "update"] # La même ou presqueRUN apt-get -y install git \ openjdk-7-jre # Ou sur plusieurs lignes

ADD http://bit.ly/1HyjEeA /whale.gif # Ajout depuis un URICOPY target/foobar.jar / # Copie d'un fichier

VOLUME ["/data"] # Déclaration d'un volumeEXPOSE 8080 # Exposition d'un port

ENV IN_DOCKER=y # Variable d'environnementWORKDIR / # le $PWD de mon processusCMD ["java", "-jar", "/foobar.jar"]

© Copyright Zenika 4 ­ 4

Dockerfile (2/2)

$ docker build -t test .Step 0 : FROM debian:jessie ---> aaabd2b41e22Step 1 : MAINTAINER John Doe <[email protected]> ---> Running in fecfccae398b ---> 3d290dc10132Removing intermediate container fecfccae398bStep 2 : RUN apt-get -y update ---> Running in d72fb9cfda61# […]Step 5 : ADD http://bit.ly/1HyjEeA /whale.gifDownloading [======================>] 1.02 MB/1.02 MB# […]Step 11 : CMD java -jar /foobar.jar ---> Running in 4239619930e2 ---> 8ba1ccb146c9Removing intermediate container 4239619930e2Successfully built 8ba1ccb146c9$ docker run -rm -i test1 # it runs !

© Copyright Zenika 4 ­ 5

Conteneurs (1/3)

© Copyright Zenika 4 ­ 6

Conteneurs (2/3)

© Copyright Zenika 4 ­ 7

Conteneurs (3/3)

Quelques commandes en plus

ps : Liste les conteneurs actif et inactif

exec : Lancer une commande à l'intérieur d'un conteneur

diff : Montre les différences au niveau filesystem entre le conteneur et sonimage associée

create : Créer un conteneur à base d'une image

rm : Supprime un conteneur (et donc ses données avec)

© Copyright Zenika 4 ­ 8

Volumes pour persister les données

Découpler le cycle de vie de données du cycle de vie du conteneur

Dossier qui n'utilise pas (bypass) les layers

Initialiser à la création du conteneur

Partage entre conteneur possible

Données directement écrite directement, non inclus dansl'image

Persistent tant qu'ils sont utilisés

© Copyright Zenika 4 ­ 9

Pattern d'utilisationsimples

5

Isoler vos build

Language stack & image de build

Build tools inside images

"Separation of concern"

Jenkins & slaves ont juste besoin de Docker

Dev & Intégration continue se base sur les même images pour lebuild

Les developpeurs ont "la main" sur le build

© Copyright Zenika 5 ­ 1

Setup de l'environnement de développement

Isoler les services externes du SI sur les machines dedevelopement

Pas besoin de les installer manuellement

Mutualiser et distribuer les configurations de ces services

Fournit en amont

Les mêmes pour tous

Passage d'un projet à l'autre simplifié

docker stop, docker run

Intégration continue \o/

© Copyright Zenika 5 ­ 2

Tests in a different environment

Que faire si je veux.. :

.. vérifier que mon application tourne sous Ruby 2.1.5

docker […] run ruby:2.1.5 […]

.. vérifier que mon application compile sous Java 6

.. vérifier que mon application est compatible avec MySQL5.6

.. vérifier que mon application est scalable

.. tester gitlab, kanboard, une appli node.js xD

© Copyright Zenika 5 ­ 3

The Universal Package Format

Remplacer apt-get, yum, pacman, …par

docker run […]

Installation pattern

nsenter

© Copyright Zenika 5 ­ 4

Hands-on n.2

6

Hands-on #1 : Dockerfile

Construire une image Docker d'Elasticsearch en complétant ce quimanque

Démarrer plusieurs conteneurs à partir de l'image fraichement créée

Voir le résultat dans votre navigateur (grâce au plugin head)

© Copyright Zenika 6 ­ 1

Hands-on #1 : Dockerfile Tips

Démarrer elasticsearch bin/elasticsearch

run options

-v (--volume) : monter un dossier du host dans le conteneur(hostFolder:containerFolder)

-p (--publish) : publier un port sur l'interface du host(hostPort:containerPort)

Plusieurs images : binder des ports différents sur le host (9200, 9201, 9202, ..)

Voir les nœuds elasticsearch : http://127.0.0.1:9200/_plugin/head

© Copyright Zenika 6 ­ 2

Hands-on #2 : Patterns

Builder : Builder votre projet favoris avec Docker

Java : (maven), (java)

Clojure : (clojure), (clojure)

Haskell : (zenika/haskell­make)

Tips : l'option --rm (supprime automatiquement le conteneur s'il existe) peutêtre utile

Tester l'image elasticsearch avec jdk6, jdk8 ou fluent­http avec jdk7

Tester des softwares pré­packager ( , ..)

fluent­http spring­security

liberator tentacles

pandoc

gitlab

© Copyright Zenika 6 ­ 3

Prochaine session

7

Proposition #1

Cycle de vie d'un conteneur avancé

Docker Hub: pull, push

Versionner une image : commit, tag

Etat d'un container : save, load

Gestion de environnement avancés

Docker sur des OS non linux (vagrant et dockermachine)

multi­conteneur (fig et docker compose)

multihost (kubernetes and docker swarm)

© Copyright Zenika 7 ­ 1

Proposition #2

Patterns d'utilisationavancés

data­only container

ambassador container

Docker et le cloud

Docker hub

PAAS : gae, aws, deis

© Copyright Zenika 7 ­ 2

© Copyright Zenika 7 ­ 3