nightclazz docker découverte
TRANSCRIPT
Qui sommes nous ?
Mario [email protected]
github: l0rd@mariolet
Vincent [email protected]
github: vdemeester@vdemeest
© Copyright Zenika
Info pratiques
Programme de la soirée :
19h3019h50 : Docker et VMs (20min)19h5020h30 : Premier handson (40min)20h3021h00 : Pizza (30min)21h0021h30 : Patterns simples (30min)21h3022h30 : Deuxieme handson (1h)
Vous avez des problèmes pour installer Docker ?Nous avons des clés USB
WiFi : ZenikaGuest/Welcome2Zenika!
© Copyright Zenika
Sommaire
Qu'estce que Docker ?
Comparaison avec les VMstraditionelles
Handson
Cycle de vie d'un conteneur
Patterns d'utilisation simples
Handson
© Copyright Zenika
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
Quelques définitions
"Docker is an open platform for developers andsysadmins to build, ship, and run distributed applications."
docker.com
"Docker is an opensource project that automates thedeployment of applications inside software containers"
wikipedia.org
© Copyright Zenika 1 3
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 : 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
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
Hands-on #0 : Configuration
Installer git
Cloner le repo [email protected]:Zenika/NCDockerDecouverte.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/nodejssampleapp:latest en mode detached pour démarrer un serveur nodejs
run option -d
Récuperer l'identifiant du conteneur (ps), et arretezle (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/nodejssampleapp: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
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 multilayer 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 (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
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 #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/haskellmake)
Tips : l'option --rm (supprime automatiquement le conteneur s'il existe) peutêtre utile
Tester l'image elasticsearch avec jdk6, jdk8 ou fluenthttp avec jdk7
Tester des softwares prépackager ( , ..)
fluenthttp springsecurity
liberator tentacles
pandoc
gitlab
© Copyright Zenika 6 3
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)
multiconteneur (fig et docker compose)
multihost (kubernetes and docker swarm)
© Copyright Zenika 7 1
Proposition #2
Patterns d'utilisationavancés
dataonly container
ambassador container
Docker et le cloud
Docker hub
PAAS : gae, aws, deis
© Copyright Zenika 7 2