Conseils, services, ingénierie en informatique. Mise en place de solutions technologiques, et support, pour les entreprises.

Note utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

Présentation de Docker 

 

Docker logo 011 300x232

 

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:

 

https://hub.docker.com

 

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