Introduction
D'après Wikipedia :
Docker permet la mise en œuvre de conteneurs s'exécutant en isolation, via une API de haut-niveau. Construit sur des capacités du noyau Linux (surtout les cgroups et espaces de nommage).
Avec des mots plus simples, Docker est un outil permettant aux développeurs de facilement empaqueter une application ainsi que toutes ses dépendances dans un environnement léger et isolé appelé container.
Docker est l'alternative aux machines virtuelles.
Qu'est-ce qu'une machine virtuelle
Avant de comprendre se qu'est réellement Docker et un container, il faut connaître la notion de machine virtuelle autrement appelée VM.
Une machine virtuelle exécute les applications dans un sous-OS (Guest OS) fonctionnant sur du matériel virtualisé par un OS hôte qui lui même tourne sur une machine bien réelle. Les VMs sont un très bon moyen de complètement isoler des applications : Il y a très peu de chance pour qu'une VM puisse impacter les autres présentes sur le même système.
Mais la virtualisation possède son lot d'inconvénients :
- La performance : beaucoup de ressources sont utilisées par le simple fait de virtualiser une machine
- Le poid : une VM embarque l'entièreté d'un OS
La containerisation est là pour répondre à ces problématiques.
Qu'est-ce qu'un container
Contrairement à une machine virtuelle, un container n'embarque pas d'OS et exécute directement les processus sur l'OS hôte en les isolants grâce à des fonctionnalités spécifiques au Kernel Linux (notamment les Namespaces et les CGroups).
Grâce à cette méthode, on peut cocher tous les critères :
✔ Environnement isolé
✔ Consomme peu de ressources
✔ Très léger (-4MB)
✔ Un temps de démarrage très court
Qu'est-ce que Docker
Docker permet de créer, publier et exécuter des containeurs. Il en existe d'autre comme Podman ou encore Buildah mais c'est encore aujourd'hui la technologie la plus utilisée.
Grâce à Docker il est très facile de créer un container grâce à un Dockerfile, un simple fichier contenant toutes les commandes qu'un utilisateur pourrait lancer pour mettre en place son environnement.
# On utilise une image avec NodeJS déjà installé
FROM node:16
# On sélectionne le dossier dans lequel on souhaite travailler
WORKDIR /app
# On copie notre projet (machine hôte) dans le dossier /app
COPY . .
# On installe les dépendances NPM
RUN npm install
# On build notre App
RUN npm run build
# On indique la commande à lancer à l'execution de notre Container
CMD ["node", "dist/app.js"]
Et avec son Registry (le NPM de Docker) il est possible de publier son container pour le partager.
Grâce à la communauté open-source il existe déjà un très grand nombre d'image que vous pouvez utiliser pour vous éviter de réinventer la roue.
Il suffit de lancer la commande docker run mysql
pour démarrer une base de données sur sa machine.
Les avantages de Docker
Le cache
Les commandes exécutées pour créer un container sont mises en cache puis réutilisées pour diminuer drastiquement le temps de création de vos environnements isolés.
Docker Hub
Docker Hub est le Registry publique officiel de Docker, c'est ici que vous trouverez votre bonheur pour éviter de réinventer la roue. La communauté open-source étant très active, vous trouverez facilement tous les services dont vous avez besoin déjà containerisés.
Le Versionning
Il est possible d'attribuer des tags lorsque vous publiez vos applications containerisés, il devient donc facile de versionner en utilisant le nombre de la branche ou du tag Git qui a construit votre environnement.
Vous pouvez utiliser la dernière version de NodeJS avec
docker run node:latest
ou une version spécifique avecdocker run node:16
.
Les cas d'usages de Docker
Environnement local
Terminé les IWOMM (It works on my machine) avec Docker. Qu'ils soient sur Windows, Linux ou Mac, vos développeurs possèdent le même environnement local et travaillent avec les même versions de vos services.
Grâce à Docker Compose vous pouvez décrire l'entièreté de votre écosystème dans un simple fichier et l'héberger sur Git pour que vos développeurs n'aient qu'une seule commande à lancer pour être oppérationnel.
Intégration continue
Dans un pipeline d'intégration continue il y a souvent beaucoup d'étapes avec différents outils. Grâce à la rapidité de lancement d'un container et au travail de la communauté, Docker s'y prête parfaitement
Hébergement
Une fois que notre container est publié dans un Registry, il est extrêmement simple de le déployer à n'importe quel endroit. Et grâce au versionning on peut très rapidement revenir à une version antérieure si il y a des bugs dans notre nouvelle fonctionnalité.
Pour conclure
Docker est un outil permettant d'empaqueter et de publier une application et toute ses dépendances dans un environnement très léger sans se soucier de l'infrastructure sous-jacente.
La containerisation deviens un standard dans l'industrie car c'est une alternative performante et légère aux machines virtuelles.
Un projet DevOps ?
Contactez-nous !