Qu'est-ce que Docker ?

Martin PAUCOT
Publié le 2/13/2023
Retour

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 avec docker 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.

Partagez cet article :

Un projet DevOps ?

Contactez-nous !
© 2023 Syneki. Tous droits réservés.
Mentions Legales