NightClazz Docker Découverte

1 535 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
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 535
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
28
Commentaires
0
J’aime
4
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

×