Contenu connexe Similaire à NightClazz Docker Découverte (20) NightClazz Docker Découverte 2. Qui sommes nous ?
Mario Loriedo
mario.loriedo@zenika.com
github: l0rd
@mariolet
Vincent Demeester
vincent.demeester@zenika.com
github: vdemeester
@vdemeest
© Copyright Zenika
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
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. Détails techniques : Union mount
//Sliceofdriversthatshouldbeusedinanorder
priority=[]string{
"aufs",
"btrfs",
"devicemapper",
"vfs",
"overlayfs"}
© Copyright Zenika 1 9
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. Quand utiliser les deux ?
Sur Windows et Mac
Quand on veut reproduire un environement de
prod
© Copyright Zenika 2 3
19. Quand utiliser un conteneur
Dans tous les autres cas ;)
© Copyright Zenika 2 4
21. Hands-on #0 : Configuration
Installer git
Cloner le repo git@github.com:Zenika/NCDocker
Decouverte.git
Installer docker et autres outils
Ou bien simplement :
curl-sSLhttp://goo.gl/iRGzlj|bash
© Copyright Zenika 3 1
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/nodejssample
app: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
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/nodejssampleapp:latest
En mode detached
Démarrer quelque VMs (qemu, virtualbox) et vérifier les resources
utlisées
© Copyright Zenika 3 3
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
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
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
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. 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. The Universal Package Format
Remplacer apt-get, yum, pacman, …
par
docker run […]
Installation pattern
nsenter
© Copyright Zenika 5 4
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. 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. 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