← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 23 févr. 2022

Catégorie Cloud / DevOps

Docker, à quoi ça sert ?

Docker est une plateforme de conteneurs open source qui permet de créer des environnements isolés sur un seul et même système. Il permet de faciliter le déploiement et la mise à l'échelle au niveau applicatif. Aujourd'hui, Docker est la plateforme la plus populaire et la plus utilisée, en grande partie grâce à sa simplicité d'utilisation.

Logo Docker

Mais pourquoi Docker est devenu aussi populaire ? Et surtout, c'est quoi la conteneurisation ? Est-ce que cela a un rapport avec la virtualisation ? Voyons tout cela en détails.

La virtualisation

Pour bien comprendre l'intérêt de Docker, il nous faut tout d'abord revenir au principe de virtualisation.

Lorsque l'on parle de virtualisation, il s'agit souvent de virtualisation matérielle. C'est ce principe qui permet de démarrer et exécuter plusieurs systèmes d'exploitation invités sur un système hôte commun.

Une machine virtuelle (ou VM pour virtual machine) est une émulation d'un système d'exploitation dans une machine hôte ou un serveur. Ainsi, grâce à la virtualisation, on peut exécuter plusieurs machines virtuelles au sein d'une seule et même machine hôte.

Le concept de machine virtuelle a été décisif dans la popularité du Cloud Computing. Les serveurs que l'on provisionne dans le Cloud sont justement des systèmes virtualisés, en colocation avec d'autres systèmes sur lesquels nous ne pouvons pas communiquer. Ainsi, en virtualisation matérielle, un hyperviseur gère les ressources allouées à chaque système virtuel.

Dans certains cas, il est possible de demander à ce qu'un serveur soit dédié, c'est-à-dire qu'il ne soit pas une machine virtuelle, mais cela coûte plus cher.

Il y a plusieurs intérêts à utiliser des machines virtuelles.

  • La flexibilité, car nous pouvons redimensionner les ressources d'une machine virtuelle quand on le souhaite, ce qui est bien plus difficile avec un serveur physique.
  • La rapidité de lancement : une machine virtuelle peut être provisionnée est exécutée en quelques dizaines de secondes.

Seulement, dans un contexte de microservices omniprésents dans le Cloud, les machines virtuelles ont présentés des limites.


À lire : découvrez notre formation DevOps Engineer


Tout d'abord, bien qu'elles soient rapides à lancer par rapport à un serveur physique, elles restent tout de même lentes en comparaison avec des applications, qui doivent être capables de se lancer en seulement quelques secondes.

Ensuite, les machines virtuelles ne peuvent pas être traitées comme une ressource atomique (comme un fichier). En effet, il faut rattacher à une machine virtuelle un disque dur, un système d'exploitation, des informations réseaux, etc. Tout ceci rend la machine virtuelle lourde à manipuler de manière dynamique.

Pour terminer, les systèmes d'exploitation sur les machines virtuelles intègrent de nombreux composants et logiciels qui ne sont pas indispensables pour l'application que l'on souhaite exécuter.

C'est alors que les conteneurs ont fait leur apparition pour pallier à tous ces problèmes.

Les conteneurs

Un conteneur utilise les mêmes logiques de fonctionnement que la virtualisation, mais s'adapte aux cas des applications.

Cette approche ouvre de nouvelles possibilités sur le déploiement applicatif.

  • Les conteneurs fournissent un environnement isolé, permettant ainsi d'éviter d'installer des composants sur le système cible et éviter les interférences avec les autres applications.
  • Les conteneurs étant facilement déployables à l'instar d'un système, il est relativement facile de les utiliser pour des applications qui demandent une scalabilité.
  • La configuration des conteneurs est effectuée par une succession de commandes regroupées dans un Dockerfile, ce qui facilite sa création et sa modification.

Docker

C'est sur ce point que Docker, plateforme open source de conteneurs créée en 2013, apporte une nouveauté. La virtualisation n'est plus réalisée par l'hyperviseur sur le système hôte, mais directement par la plateforme Docker. Ainsi, Docker permet de conteneuriser des applications et de les isoler au même titre qu'un hyperviseur isole des systèmes d'exploitation.

En d'autres termes, nous pourrons exécuter plusieurs applications, isolés logiquement, sur un seul et même système avec Docker. Cela permet d'éviter les problèmes de conflits qu'il pourrait y avoir si on exécutait plusieurs applications sur un système, mais qui nécessitent des versions logicielles différentes.

Docker est aussi multi-plateforme. Bien qu'il soit majoritairement utilisé sur les systèmes Unix, il est possible d'exécuter des conteneurs Docker sous Windows également, notamment grâce à son environnement runtime.

Dockerfile

Avant d'exécuter un conteneur, il faut créer une image. Cette image contient un système packagé avec des applications installées dessus. C'est équivalent à un système compressé que l'on peut exécuter sous forme de conteneurs.

Attention donc à ne pas confondre : un conteneur est une instance d'une image, une exécution de cette image sur un système. Au même titre, une machine virtuelle est l'exécution d'une image système (Linux, Windows) sur un hyperviseur.

Pour créer cette image, on rédige un fichier texte appelé Dockerfile, qui contient toutes les instructions permettant d'installer et de configurer le système qui sera packagé.

Dans ce Dockerfile, on retrouve alors les commandes de récupérations de paquets, de configuration de runtimes (langages, utilisateurs), de configuration réseau ou encore de variables d'environnement.

Orchestration de conteneurs

Les conteneurs peuvent être exécutés sur une machine virtuelle. Mais dans cette configuration, on retrouve les mêmes difficultés d’administration, de maintenance, de configuration, etc.

Pour cela, on utilise en pratique des plateformes d’orchestration de conteneurs, qui vont gérer à notre place la partie infrastructure. Parmi les plateformes d’orchestration les plus connues, on retrouve Kubernetes qui a révolutionné le monde des conteneurs.

Logo Kubernetes

Quand utiliser Docker ?

Tout comme les machine virtuelles, les conteneurs se basent sur des images qui correspondent à des systèmes d’exploitation avec ou sans installations supplémentaires. On dispose alors du même degré de configuration que sur les VM.


À découvrir : notre formation DevOps Engineer


L'utilisation d’un conteneur est privilégié dans les situations suivantes.

  • Plusieurs programmes doivent être exécutés en même temps que l’application. Le fait de pouvoir packager toutes ces dépendances dans un même conteneur permet de réduire les risques d'effets de bord et garantit le caractère séquentiel/l'ordre de l'exécution des applications sous-jacentes.
  • L’application doit être capable de supporter des charges de travail importantes et soudaines. Avec les plateformes d'orchestration de conteneurs comme Kubernetes ou Docker Swarm, il est facile de redimensionner un service en utilisant des conteneurs, car ces derniers sont plus légers et flexibles que des machines virtuelles.
  • Des services d’orchestrations sont déjà utilisés par le client. Si une entreprise utilise déjà des services d'orchestration, utiliser Docker permet d'harmoniser les outils internes.
  • On souhaite utiliser les bonnes pratiques d’automatisation et de déploiement. Les images Docker s'intègrent parfaitement dans les cycles de livraison continu (pipelines CI/CD), ce qui permet d'automatiser leur construction et leur déploiement sans intervention humaine.
  • On souhaite pouvoir exécuter l’application sur n’importe quel Cloud et/ou en On-Premise sans modification. Puisque Docker est multi-plateforme et très utilisée, les conteneurs sont supportés et exécutables dans de très nombreux environnements différents.

Pour conclure, on utilise un conteneur pour les applications fonctionnant sous forme de microservices (API, backends) et lorsque l’on souhaite interagir avec de nombreux outils de déploiement et d’automatisation.

Vous souhaitez vous former au Cloud / DevOps ?

Articles similaires

Blog

28 févr. 2024

Cloud / DevOps

Pour de nombreuses entreprises, innover chaque jour en proposant des applications à ses utilisateurs est un sujet primordial. Pour autant, cette course au déploiement continu de nouvelles applications nécessite des compétences bien particulières sur les architectures Cloud, l'automatisation de projets et la supervision. C'est à partir de ce moment qu'intervient le rôle de l'ingénieur DevOps dans les entreprises.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

23 févr. 2024

Cloud / DevOps

Dans le monde du DevOps, les conteneurs sont rapidement devenus des incontournables, aussi important que les machines virtuelles. Des plateformes de conteneurisation comme Docker ont permis de simplifier et d'accélérer la création d'image et l'exécution de conteneurs sur différents systèmes, à portée de tous.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

16 févr. 2024

Cloud / DevOps

Dans l'approche GitOps, il existe de nombreux outils permettant d'exécuter des pipelines CI/CD : certains se concentrent uniquement sur la partie intégration continue, d'autres avec le déploiement en plus. S'il y en a un qui est considéré comme l'un des plus matures et des plus robustes, c'est bien GitLab.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article