Présentation de Docker
Merci Stéphanie, Sébastien, et au sponsor HopWork de nous accueillir au 42 rue de Rochechouard 75009 PARIS
Vincent, Jean baptiste et Hugo (Lyon) developpeurs java nous mettent à disposition leurs locaux pour ce sympatique café-philo autour de docker!
40 personnes sur Paris, 6 personnes sur Lyon, 2 personnes sur Madrid
David Gageot Software engineer chez Docker Paris, centre R&D 15 personnes et logiciels
Dev moitié paris, moitié UK
Mais alors, qu’est-ce que Docker ?
Analogie avec machine virtuelle
Avec des conteneurs
Docker run –rm –it debian
Instantément on est dans un containeur avec les outils habituels
Si on fait un Rm –Rf / on supprime tout, il y a plus rien, mais avec un autre containeur tout refonctionne en 3 secondes. Avec les machines virtuelles c’est un peu plus lourd, il faut relancer la VM, puis relancer le snapshot, la sauvegarde.
Dans un conteneur, on peut tout casser, on ferme, on ouvre, ça va très vite
C'est du Linux. Et toute commande qu'on lance est un processus
Exemple top, ou ls, c'est un processus. L'idée c'est de lancer des processus dans des bacs à sables, isolés du reste du PC. Je peux faire des snapshots très rapidement. Je crée 10 containeurs, 100, des serveurs Nginx, Tomcat, etc... Je peux sauvegarder l'état et y revenir plus tard en cas de souci. En production c'est l'idéal: si souci, on stoppe le containeur qui pose problème et on redémarre un nouveau containeur tout propre le temps de trouver d'où vient la panne.
Ca lance juste des processus linux dans un bac à sable
On peut utiliser des images packagées par certaines personnes et publiées sur le hub docker sur lequel des images sont publies:
Debian par exemple propose toutes les versions, ubuntu, la plupart des logiciels opensources sont là aussi, Nginx, Apache, Java, NodeJS avec toutes les versions.
Ceux qui font du Ruby connaissent, si on veut installer 2 versions de Ruby sur sa machine, 2.4.1, et une autre version en parallèle, la ruby 2.3.4 tout fonctionne très bien avec Docker. Ce n'est pas le cas avec 2 versions de Ruby sur notre PC, ça plante souvent pour les connaisseurs.
L'image Docker est découpée e "tranches", et cette image en plusieurs couches est streamée en temps réel depuis le serveur: OS, runtime, configuration, utilisaeurs, etc...
Quand on utilise 2 versions de Ruby par exemple, elles ont des composants en communs, pas besoin de retélécharger tout le reste, on ne télécharge que les deltas qui changent.
Une question? Posez-la ici
Comment créer une image docker?
le projet: project, la recette de cuisine: "Dockerfile", from alpine (petite distribution linux de 30 Mo)
puis pour installer des dépendances, utilitaires: RUN apk add --no-cache curl
Docker lance un containeur sur Alpine, puis une autre commande, cela va faire 2 couches docker.
Ce qui est intéréssant dans une image c'est comment on va s'en servir ensuite
CMD curl
docker build . -t curl
Docker execute les commandes une par une, ensuite il téélcharge les dépendances
il fige chaque couche, il donne un identifiant avec ---->
On empile donc nos composants sur nos images, comme vagrant https://fr.wikipedia.org/wiki/Vagrant, on crée des couches
Et on peut executer notre container
docker run --rm -it curl
Niveau technique, en toute transparence, Docker installe une petite VM linux dans laquelle il intègre les fichiers virtuels.
Le containeur lit les fichiers, il compile, il crée un package, je peux le distribuer, le mettre en production.
Cette image, je sais comment elle a été créée et elle va fonctionner sur toutes les machines, car tout ce qu'il y a dans l'image est reproductible sur n'importe quel environnement
On peut faire une image automatique, la monter automatiquement au démarrage de la machine. On sera dans l'environnement au démarrage de la machine.
Une question? Posez-la ici
Pour lancer un serveur web nginx invisible
Sur le port 80 vers le port 80 exposé:
docker run -d -p nginx 80:80 nginx
Et voilà, un serveur web nginx Dockerisé sur une machine .
On peut en lancer plusieurs si besoin. L'interet c'est que chacun des serveurs webs sont isolés les uns des autres: idéal pour la sécurité
docker ps
pour voir tous les process
On lance le containeur, et dès qu'il s'arrête, tout est effacé du disque:
docker run --rm -it -p 80:80 nginx
Ideal pour les micro services
Par exemple, un containeur pour la base de donnée, un container pour le serveur web...
docker-compose.yml
On peu restreindre le container en fonction des ressources qu'on a envie de lui allouer, exemple: 1Mo de ram pour Nginx...
Une question? Posez-la ici
On recréer une infrastructure complète en Docker sur un seul PC
docker-compose up
Un réseau virtuel est crée pour relier tous les services ensembles: tous les services se connectent les uns les autres et se retrouvent: le service web se connectera au container de la base de donnée.
Dans la stack, il y a 4 services par exemple
atom docker-compose.yml
on voit les composants
Un container pour le front
Un container pour le serveur java (words)
Un container pour le serveur go
Un container pour la base mongodb
docker-compose scale words=5
Une question? Posez-la ici
On peut scaler les process à fond les ballons!
Et hop:
docker-compose scale words=50
50 serveurs java sur le PC!
Tout ça sur une machine.
Pour tout arrêter:
docker-compose down
Sur un cluster on peut scaler davantage avec Docker Swarm
Les containers Windows. Sous Windows on a les même commandes, avec le dockerfile, from, run, sauf que les commandes sont des commandes Windows: cmd, powershell, classique. On lancera IIS, NodeJS sous windows, tout ça découpé en composants
MAIS les containers linux tournent sur linux
Les containers Windows tournent sur Windows.
Une image Linux n'est pas la même que l'image Windows, attention.
Une question? Posez-la ici