Docker découverte
Qui sommes nous ?
Mario Loriedo
mario.loriedo@zenika.com 
github: l0rd
@mariolet
Vincent Demeester
vincent.demeester@zenik...
Info pratiques
Programme de la soirée :
19h30­19h50 : Docker et VMs (20min)
19h50­20h30 : Premier hands­on (40min)
20h30­2...
Sommaire
Qu'est­ce que Docker ?
Comparaison avec les VMs
traditionelles
Hands­on
Cycle de vie d'un conteneur
Patterns d'ut...
Qu'est-ce que Docker ?
1
Docker timeline
Quelques dates :
­ mars 2013 : dotCloud rend disponible Docker en Open Source
­ aout 2013 : eBay, Uber, Cl...
Ok mais....
© Copyright Zenika 1 ­ 2
Quelques définitions
"Docker is an open platform for developers and
sysadmins to build, ship, and run distributed applicat...
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 Client
dockerpull
dockerru...
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...
Détails techniques : Union mount
//Sliceofdriversthatshouldbeusedinanorder
priority=[]string{
"aufs",
"btrfs",
"devicemapp...
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 du
kernel
Quand la sécurité du conteneur est impor...
Quand utiliser les deux ?
Sur Windows et Mac
Quand on veut reproduire un environement de
prod
© 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 git@github.com:Zenika/NC­Docker­
Decouverte.git
Installer docker ...
Hands-on #1 : Démarrer et arreter un conteneur
Démarrer un conteneur Docker à partir de l'image debian:jessie en ouvrant u...
Hands-on #2 : Conteneurs vs VMs - Resources
Démarrer 50 conteneur :
Vérifier les resouces utilisées avant et après (avec h...
Hands-on #3 : Conteneurs vs VMs - Isolation
Chercher le PID des process nodejs des 50 conteneurs démarrés auparavant en
ut...
Cycle de vie
4
Cycle de vie
Registry (Distribution)
Liste d'images
Images (Construction)
Template
Lecture seule
Conteneurs (Runtime)
:
Ba...
Images (1/2)
Template multi­layer pour les conténeurs, héritage entre images
Place sur le disque : 258M
© Copyright Zenika...
Images (2/2)
Commandes usuelles
images : liste les images disponible en local
search : effectue une recherge sur le hub d'...
Dockerfile (1/2)
FROMdebian:jessie #BasésurDebian
MAINTAINERJohnDoe<john@doe.com>
RUNapt-get-yupdate #Unecommande
RUN["apt...
Dockerfile (2/2)
$dockerbuild-ttest.
Step0:FROMdebian:jessie
--->aaabd2b41e22
Step1:MAINTAINERJohnDoe<john@doe.com>
--->Ru...
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é...
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...
Pattern d'utilisation
simples
5
Isoler vos build
Language stack & image de build
Build tools inside images
"Separation of concern"
Jenkins & slaves ont ju...
Setup de l'environnement de développement
Isoler les services externes du SI sur les machines de
developement
Pas besoin d...
Tests in a different environment
Que faire si je veux.. :
.. vérifier que mon application tourne sous Ruby 2.1.5
docker […...
The Universal Package Format
Remplacer apt-get, yum, pacman, …
par
docker run […]
Installation pattern
nsenter
© Copyright...
Hands-on n.2
6
Hands-on #1 : Dockerfile
Construire une image Docker d'Elasticsearch en complétant ce qui
manque
Démarrer plusieurs conten...
Hands-on #1 : Dockerfile Tips
Démarrer elasticsearch bin/elasticsearch
run options
-v (--volume) : monter un dossier du ho...
Hands-on #2 : Patterns
Builder : Builder votre projet favoris avec Docker
Java :   (maven),   (java)
Clojure :   (clojure)...
Prochaine session
7
Proposition #1
Cycle de vie d'un conteneur avancé
Docker Hub: pull, push
Versionner une image : commit, tag
Etat d'un cont...
Proposition #2
Patterns d'utilisation
avancés
data­only container
ambassador container
Docker et le cloud
Docker hub
PAAS ...
© Copyright Zenika 7 ­ 3
Prochain SlideShare
Chargement dans…5
×

NightClazz Docker Découverte

1 538 vues

Publié le

Après avoir abordé les différentes problématiques autour d'AngularJS, du Continuous Delivery et de Java 8 :
les NightClazz sont de retours en 2015.

Zenika a hébergé le Docker Tour de France, en décembre dernier, souhaitant poursuivre notre investissement sur cette technologie nous vous proposons d'assister à la NightClazz Docker - Découverte.

Publié dans : Technologie
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 538
Sur SlideShare
0
Issues des intégrations
0
Intégrations
8
Actions
Partages
0
Téléchargements
27
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

NightClazz Docker Découverte

  1. 1. Docker découverte
  2. 2. Qui sommes nous ? Mario Loriedo mario.loriedo@zenika.com  github: l0rd @mariolet Vincent Demeester vincent.demeester@zenika.com github: vdemeester @vdemeest  © Copyright Zenika
  3. 3. 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
  4. 4. Sommaire Qu'est­ce que Docker ? Comparaison avec les VMs traditionelles Hands­on Cycle de vie d'un conteneur Patterns d'utilisation simples Hands­on © Copyright Zenika
  5. 5. Qu'est-ce que Docker ? 1
  6. 6. 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
  7. 7. Ok mais.... © Copyright Zenika 1 ­ 2
  8. 8. Quelques définitions "Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications." docker.com                     "Docker is an open­source project that automates the deployment of applications inside software containers" wikipedia.org                     © Copyright Zenika 1 ­ 3
  9. 9. Une métaphore - le transport de conteneurs © Copyright Zenika 1 ­ 4
  10. 10. Une métaphore - une révolution © Copyright Zenika 1 ­ 5
  11. 11. Détails techniques - Architecture Host Container 1 Container 2 Container 3 Container ... Docker Client dockerpull dockerrun docker... Docker Index Docker Daemon © Copyright Zenika 1 ­ 6
  12. 12. Détails techniques - Isolation "chroot on steroids" © Copyright Zenika 1 ­ 7
  13. 13. 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
  14. 14. Détails techniques : Union mount //Sliceofdriversthatshouldbeusedinanorder priority=[]string{ "aufs", "btrfs", "devicemapper", "vfs", "overlayfs"} © Copyright Zenika 1 ­ 9
  15. 15. Containers vs VM 2
  16. 16. Comparaison de l'architecture VM/Conteneur © Copyright Zenika 2 ­ 1
  17. 17. Quand utiliser une VMs Quand l'application dépend d'une version précise du kernel Quand la sécurité du conteneur est importante Sur Windows et Mac © Copyright Zenika 2 ­ 2
  18. 18. Quand utiliser les deux ? Sur Windows et Mac Quand on veut reproduire un environement de prod © Copyright Zenika 2 ­ 3
  19. 19. Quand utiliser un conteneur Dans tous les autres cas ;­) © Copyright Zenika 2 ­ 4
  20. 20. Hands-on n.1 3
  21. 21. Hands-on #0 : Configuration Installer git Cloner le repo git@github.com:Zenika/NC­Docker­ Decouverte.git Installer docker et autres outils Ou bien simplement : curl-sSLhttp://goo.gl/iRGzlj|bash © Copyright Zenika 3 ­ 1
  22. 22. Hands-on #1 : Démarrer et arreter un conteneur Démarrer un conteneur Docker à partir de l'image debian:jessie en ouvrant un shell 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
  23. 23. 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 resources utlisées © Copyright Zenika 3 ­ 3
  24. 24. Hands-on #3 : Conteneurs vs VMs - Isolation Chercher le PID des process nodejs des 50 conteneurs démarrés auparavant en utilsant la commande ps Essayer de killer les process Faire la même chose pour une VM © Copyright Zenika 3 ­ 4
  25. 25. Cycle de vie 4
  26. 26. Cycle de vie Registry (Distribution) Liste d'images Images (Construction) Template Lecture seule Conteneurs (Runtime) : Basé sur une image Dispose d'un état © Copyright Zenika 4 ­ 1
  27. 27. Images (1/2) Template multi­layer pour les conténeurs, héritage entre images Place sur le disque : 258M © Copyright Zenika 4 ­ 2
  28. 28. 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 IMAGEID CREATED VIRTUALSIZE debian jessie b427819b829a 4daysago 715.6MB #[…] © Copyright Zenika 4 ­ 3
  29. 29. Dockerfile (1/2) FROMdebian:jessie #BasésurDebian MAINTAINERJohnDoe<john@doe.com> RUNapt-get-yupdate #Unecommande RUN["apt-get","-y","update"] #Lamêmeoupresque RUNapt-get-yinstallgit openjdk-7-jre #Ousurplusieurslignes ADDhttp://bit.ly/1HyjEeA/whale.gif#AjoutdepuisunURI COPYtarget/foobar.jar/ #Copied'unfichier VOLUME["/data"] #Déclarationd'unvolume EXPOSE8080 #Expositiond'unport ENVIN_DOCKER=y #Variabled'environnement WORKDIR/ #le$PWDdemonprocessus CMD["java","-jar","/foobar.jar"] © Copyright Zenika 4 ­ 4
  30. 30. Dockerfile (2/2) $dockerbuild-ttest. Step0:FROMdebian:jessie --->aaabd2b41e22 Step1:MAINTAINERJohnDoe<john@doe.com> --->Runninginfecfccae398b --->3d290dc10132 Removingintermediatecontainerfecfccae398b Step2:RUNapt-get-yupdate --->Runningind72fb9cfda61 #[…] Step5:ADDhttp://bit.ly/1HyjEeA/whale.gif Downloading[======================>] 1.02MB/1.02MB #[…] Step11:CMDjava-jar/foobar.jar --->Runningin4239619930e2 --->8ba1ccb146c9 Removingintermediatecontainer4239619930e2 Successfullybuilt8ba1ccb146c9 $dockerrun-rm-itest1#itruns! © Copyright Zenika 4 ­ 5
  31. 31. Conteneurs (1/3) © Copyright Zenika 4 ­ 6
  32. 32. Conteneurs (2/3) © Copyright Zenika 4 ­ 7
  33. 33. 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 son image 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
  34. 34. 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 dans l'image Persistent tant qu'ils sont utilisés © Copyright Zenika 4 ­ 9
  35. 35. Pattern d'utilisation simples 5
  36. 36. 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 le build Les developpeurs ont "la main" sur le build © Copyright Zenika 5 ­ 1
  37. 37. Setup de l'environnement de développement Isoler les services externes du SI sur les machines de developement 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
  38. 38. 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 MySQL 5.6 .. vérifier que mon application est scalable .. tester gitlab, kanboard, une appli node.js xD © Copyright Zenika 5 ­ 3
  39. 39. The Universal Package Format Remplacer apt-get, yum, pacman, … par docker run […] Installation pattern nsenter © Copyright Zenika 5 ­ 4
  40. 40. Hands-on n.2 6
  41. 41. Hands-on #1 : Dockerfile Construire une image Docker d'Elasticsearch en complétant ce qui manque 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
  42. 42. 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
  43. 43. 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
  44. 44. Prochaine session 7
  45. 45. 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 docker machine) multi­conteneur (fig et docker compose) multihost (kubernetes and docker swarm)  © Copyright Zenika 7 ­ 1
  46. 46. Proposition #2 Patterns d'utilisation avancés data­only container ambassador container Docker et le cloud Docker hub PAAS : gae, aws, deis © Copyright Zenika 7 ­ 2
  47. 47. © Copyright Zenika 7 ­ 3

×