Docker -Windows 1er pas
Pourquoi ?

Le problème des VM est qu’elles occupent plus d’espace que nécessaire. Prenons l’exemple d’un serveur d’application. Il contient l’application et un système d’exploitation dédié. Ce dernier consomme de l’espace de stockage, de la mémoire, des cycles de CPU et d’autres ressources matérielles. ON ce retrouve vite avec des hôtes devant faire tourner un grand nombre de VM, chacune d’entre elles exécutant le même système d’exploitation.
La technique des conteneurs vise à résoudre ce problème de volume en utilisant une instance unique du système d’exploitation, partagée par tous les conteneurs. Un conteneur ressemble à une application virtualisée dans la mesure où il renferme les fichiers binaires et de configuration de l’application, mais côté système d’exploitation, il ne stocke que les composants modifiés par l’application, tels que les entrées du registre ou les pilotes spécifiques dont elle a besoin. »
(Mais aussi pour les développeurs => agile )
Un conteneur permet d’isoler chaque service : le serveur web, la base de données, une application peuvent être exécutés de façon indépendante dans leur conteneur dédié, contenant uniquement les dépendances nécessaires. Chaque conteneur est relié par des réseaux virtuels. Il est possible de monter des volumes de disque de la machine hôte dans un conteneur.
Une image est un container “statique“, c’est à dire qu’on a pris une photo d’un container à un instant T comprenant nos paramétrages par défaut ce qui nous permet de la dupliquer à volonté.
Les images Docker permettent aussi de réaliser des sauvegardes de tout votre environnement. En cas de gros problème, vous pourrez les restaurer. Le bémol c’est que les images peuvent être très lourdes, rendant la restauration un peu longue.
Les Dockerfiles sont des fichiers qui permettent de construire une image Docker adaptée aux besoins, étape par étape.
Les Dockerfiles prennent très peu de place et peuvent se partager/transmettre facilement. En même temps, il est possible de recréer son environnement rapidement. Mais aussi d’effectuer des tests avec des librairies qui ont subi de nouvelles mises à jour, pour vérifier que le système fonctionne toujours aussi bien avant de déployer ces mises à jour en production.
Un Docker compose est un fichier très utilisé qui permet de créer un multi-conteneur en définissant simplement la liste des conteneurs à utiliser. Et c’est très pratique car on peut ainsi décrire l’ensemble de son environnement, constitué de plusieurs images ou Dockerfiles… faire le lien entre une base de données et le site web
Container Linux / Windows
Sous Linux, il y a plein de tutos sur le net en fonction de la distribution. Ce sont des containers qui s’exécutent sur l’OS.
Sous Windows il y a moins de littérature et il y a surtout 2 grands concepts.
Les conteneurs Hyper-V : l’OS partagé par les conteneurs est celui d’une VM. Sous Windows 10 et server 16. On switch entre une vm linux et une vm windows selon l’OS « père ». C’est plus sécurisé mais plus gourmand.
Sous Windows serveur 16, on peut aussi mettre en œuvre directement Conteneurs Windows Server . Moins sécurisés, ils s’exécutent directement au-dessus de Windows Server. Partagent le même OS, les connexions réseau et le système de fichiers que le conteneur hôte. De ce fait ce ne peut etre que des Containers Windows . Ils sont par contre très légers.
Les conteneurs sont un mécanisme d’amélioration de l’efficacité grâce au partage des fichiers binaires du système d’exploitation. Cette approche améliore non seulement la capacité de l’hôte, mais facilite également la gestion des correctifs, car il y a moins de systèmes d’exploitation à mettre à jour.
Docker desktop
Une fois l’installation du programme faite. On obtient une petite baleine dans la barre des taches.

La baleine
Les préférences permettent de gérer le stockage, le réseau etc. Attention : Il faut switcher si l’on veut des containers Windows ou des containers Linux
Kitematic est un outil permettant de facilter la gestion de docker. Mais il faut beaucoup passer par Powershell.
Les commandes docker commencent par Docker – ouvrir une invite PS et taper
- Docker help
- Docker ps permet de voir les containers en route
- Docker run pour lancer un container
- docker commit image image_modifie
- docker inspect dem1_nginx
- docker stop demo_nginx
Volume
Quand on installe un service via docker il faut pouvoir « injecter » les fichiers de configuration. Il faut partager un volume entre le container et l’hôte.
Partager : dans les paramètres -settings de docker
Aller dans partager.
On accédera à ce partage en «lançant » un container avec l’option v et le mappage hote :container
v /host_mnt/e/rep-local:/usr/local/etc/haproxy par exemple
docker run –name hap -d -p8080:80 –link nginx-1 –link nginx-2 -v /host_mnt/e/docker:/usr/local/etc/haproxy haproxy:alpine
Exemple avec des containers Linux :
2 serveurs Web NGINX et un load balancer HAproxy
Containers NGINX
Lancer son container
docker run –name dem1_nginx -p 80 -d nginx
Petite explication rapide des options passées à docker run :
- –name permet de donner un nom à notre conteneur. Si on le fait pas nous même, Docker en génèrera un à notre place (par ex. tender_bardeen) ;
- -p 80 : on indique à Docker qu’on souhaite que le port 80 du conteneur soit lié à un de nos ports locaux, qu’il aura choisi lui-même ;
- -d lance le conteneur de manière détachée (sans ça, notre terminal reste attaché, et si on fait ctrl+c, on arrête le conteneur).
Docker ps permet de voir le processus et surtout le port pour interroger notre site web

Pour aller dans les fichiers du container on peut passer par l’exec depuis Kitematic:
On peut aussi se connecter sur le conteneur « nom » actuellement actif avec la commande docker exec :
docker exec -it nom-container /bin/sh
On est alors dans le shell du container qu’on manipule comme un Linux.
Un petit apt-get install wim pour avoir un éditeur (on fera plus tard une image=dockfile avec le nécessaire)
Ensuite dans le répertoire /usr/share/nginx/
Modifier chaque fichier index.html -serveur 1 / serveur 2
(il y a voir plus simple, plus script, mais on verra plus tard)
Haproxy
Ensuite pour installer un container Haproxy, il faut au préalable préparer le fichier de config
Puis enfin faite le lien entre les serveurs Web, le fichier de config et lancer le container
docker run –name hapx1 -d -p8080:80 –link nginx-1 –link nginx-2 -v /host_mnt/e/docker:/usr/local/etc/haproxy haproxy:alpine
Après un petit Docker ps
(la suite plus tard)