Les containeurs sont une façon de faire tourner un système d’exploitation et une application de manière isolée et virtualisée. A chaque démarrage, on part sur un nouvel environnement tout neuf. Il est possible de faire tourner plusieurs containers sur une même machine (host). En termes de montée en charge, une solution à base de containers offre des perspectives. Les containers offrent les bénéfices de l’isolation, de la portabilité, de l’agilité et une isolation entre les Dev et les Ops.
Les containers et Docker
Docker est un projet Open-Source pour faire tourner des containers Linux ou Windows sur le Cloud ou sur une machine standard (on-promise). Sous Windows, les développeurs peuvent faire tourner des images Linux ou Windows.
Docker et VM
Docker c’est un peu comme une VM mais en plus souple. Dans une VM, y a un OS, et N applications. Sous Docker, on a un OS et une application. Et il est possible de faire tourner plusieurs containers Docker sur la même machine.
L’avantage d’utiliser Docker c’est que le syndrome du « ça marche sur ma machine ! » ne tient plus. Si ça tourne sur Docker, ça tourne tout le temps.
Terminologie
Une image de Container : c’est un package avec toutes les dépendances pour créer le container. Une image contient les Frameworks, les DLL, les fichiers de configurations et tout ce qui est nécessaire au runtime du container. Une fois créée, une image ne peut plus être modifiée.
Un fichier Dockerfile : un fichier texte qui contient les instructions pour construire une image Docker. Ce fichier est comme un fichier CMD avec des commandes de copy, d’exécution pour mettre au point l’environnement.
Build : la commande docker build permet de construire une image Docker à partir d’un Dockerfile.
Container : c’est une instance d’une image Docker. Il exécute un service, une application et les modules de l’OS.
Volumes : C’est un espace de fichiers que le container peut utiliser.
Tag : l’identifiant d’une image docker
Repository : un endroit ou l’on peut stocker les images Docker.
Registry : Un service qui permet d’accéder aux repositories. Il existe des registries sur le Cloud.
Docker containers, images, registries
Une image Docker est une représentation statique d’une application ou d’un service avec sa configuration et ses dépendances.
Pour faire tourner un service, l’image de l’application est instanciée pour créer un container.
.NET Core ou NET Framework
Pour utiliser les containers Windows, on peut utiliser soit l’un soit l’autre. Si on a des grosses dépendances à Windows, NET Framework est le choix par défaut. Par contre, pour faire tourner un container Linux, il faut utiliser NET Core.
Au maximum, essayez de dépendre de Windows Nano Server qui est léger. Léger veut dire que l’image est moins grosse en taille.
Mise en œuvre
Voici à quoi ressemble un fichier Dockerfile :
FROM microsoft/iis:windowsservercore-ltsc2016 COPY *.* c:/ RUN sc sdset SCMANAGER D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD) RUN sc create LMDBService start=auto binpath="C:\LMDBService.exe" #EXPOSE 80 EXPOSE 7001 RUN md c:\temp
La première ligne indique l’image de l’OS qui va être utilisée. Ensuite, il s’agit de lancer des commandes comme COPY, etc. La commande EXPOSE permet d’ouvrir un port explicitement. Dans ce cas, 7001 car mon service LMDBService expose ce port là comme end-point.
Les prochaines étapes
Docker requiert que l’image soie buildée puis instanciée. On récupère son adresse IP et on peut interagir avec.
Docker est un système souple et fiable. Faites le test, cela permet de faire tourner des O.S. légers et des images diverses. Faites-vous votre propre opinion par la pratique. Cela permet de faire des environnements de développement propres.