Logo
Bannière
avatar
Par Maxime Jumelle
CTO & Co-Founder
avatar
Par Maxime Jumelle
CTO & Co-Founder
Publié le 23 février 2022
Catégorie Cloud / DevOps
Publié le 23 février 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.

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.

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.

Partager l'article
Nos parcours
Icône
Data Scientist
Apprends à résoudre des problématiques métiers grâce à la Data Science et la maîtrise du Machine Learning.
Icône
Data Engineer
Apprends à manipuler les bases de données non structurées et de lancer des calculs intensifs sur des clusters distants.
Icône
Machine Learning Engineer
Apprends à déployer des modèles de Machine Learning, à industrialiser des projets et à gérer des infrastructures hautement scalables.
Sois le premier au courant !
Inscris-toi à notre newsletter pour tout connaître de la Blent Family (c'est promis, ta boîte mail ne sera pas inondée 😉).
logo
C'est quoi Blent ?
Blent est la seule plateforme 100% en ligne où tu peux te former aux métiers de Data Scientist, Data Engineer et Machine Learning Engineer. Notre communauté compte plusieurs centaines d'alumnis, de mentors et d'entreprises.
Organisme de formation n°11755985075.
Suis-nous
Réseau social
Réseau social
Réseau social
Réseau social
© 2018 - 2021 Blent.ai | Tous droits réservés