Docker et Kubernetes : les bases de la conteneurisation

14 Avril 2025 • 6 min

Depuis plusieurs années, le monde de l’IT assiste à une transformation profonde des pratiques de développement et de déploiement des applications. Avec l’essor des microservices, du DevOps et du cloud, on parle moins de “serveurs” et de “machines virtuelles”, plus souvent de “conteneurs”, d’automatisation, de scalabilité. Dans ce nouveau paysage, deux technos reviennent constamment : Docker et Kubernetes.

Docker a démocratisé la conteneurisation, rendant la création et le déploiement d’applications plus simples, plus rapides et reproductibles. Kubernetes a permis de passer à l’échelle en orchestrant des centaines, voire des milliers de conteneurs de manière automatisée et résiliente.

Dans cet article, nous expliquons en quoi consistent ces deux technologies et leur complémentarité.

Docker : conteneurisation simplifiée

Rappel : qu’est-ce qu’un conteneur ?

Un conteneur est une unité légère et portable qui embarque tout ce qui est nécessaire pour exécuter une application : code, bibliothèques et dépendances, fichiers de configuration, etc. Contrairement aux machines virtuelles (VM), les conteneurs partagent entre eux le noyau de l’OS hôte, ce qui les rend beaucoup plus légers et rapides à démarrer.

Docker : description et rôle

Docker est une plateforme open source qui facilite la création, le packaging, le déploiement et l’exécution de conteneurs. Grâce à des fichiers de configuration appelés Dockerfiles, il devient possible de définir un environnement applicatif complet en quelques lignes de code. Le moteur Docker va ensuite construire une image qui pourra être exécutée sous forme d’un ou plusieurs conteneurs.

Docker : les bénéfices

  • Portabilité : les images Docker peuvent être exécutées de manière identique sur différents environnements (dev, test, préproduction, production) ;

  • Isolation : chaque conteneur fonctionne de manière isolée, évitant les conflits entre applications (à noter cependant que l’isolation est moins forte qu’avec des machines virtuelles) ;

  • Reproductibilité : l’environnement est défini dans le code, ce qui garantit des déploiements reproductibles ;

  • Collaboratif et facilité de distribution des images : elles peuvent être stockées et partagées via des registres (e.g. le célèbe Docker Hub)

Cas d’usage classique du développement avec des conteneurs :

Un développeur peut créer une image Docker de son application web, la tester localement, puis la pousser sur un environnement de test ou de production sans avoir à reconfigurer le système d’exploitation ou les dépendances.

Kubernetes : l’orchestration de conteneurs à grande échelle

Si Docker permet de lancer facilement un ou plusieurs conteneurs, il ne fournit pas tous les outils nécessaires pour gérer un grand nombre de conteneurs sur un cluster distribué. Lorsqu’une application commence à croître, qu’elle s’exécute sur plusieurs machines, avec plusieurs services, instances et environnements, la gestion manuelle des conteneurs atteint vite ses limites. C’est dans ce contexte que Kubernetes peut devenir indispensable.

Qu’est-ce que Kubernetes ?

Kubernetes (ou “K8s”) est une plateforme open source d’orchestration de conteneurs développée initialement par Google. Kubernetes permet de déployer, gérer, mettre à l’échelle et superviser des applications conteneurisées de manière automatisée et intelligente.

Kubernetes permet non seulement de répartir finement la charge entre plusieurs services, mais aussi de relancer automatiquement les composants défaillants, de déployer des mises à jour sans interruption, et de garantir la continuité de service, même lorsqu’un nœud tombe en panne. Kubernetes agit comme un chef d’orchestre : il assure que chaque conteneur est au bon endroit, en bonne santé, et qu’il interagit correctement avec le reste de l’environnement.

Kubernetes repose sur un modèle déclaratif : on décrit l’état souhaité du système, et le moteur s’assure de le maintenir.

Pour en savoir plus (l’histoire, l’architecture, le lien avec les composants d’infrastructure, etc.), vous pouvez consulter notre article détaillé sur Kubernetes.

Kubernetes : concepts clés

  • Pods : unité de base dans Kubernetes, un pod peut contenir un ou plusieurs conteneurs partageant le même réseau et le même stockage.

  • Services : point d’entrée réseau pour accéder à un ou plusieurs pods, même lorsque ceux-ci changent.

  • Deployments : objets qui décrivent le nombre de pods souhaités et gèrent les mises à jour automatiques.

  • Cluster : ensemble de nœuds (machines physiques ou virtuelles) orchestrés par Kubernetes.

Kubernetes : les principaux bénéfices

  • Résilience : redémarrage automatique des conteneurs en cas de crash.

  • Scalabilité : adaptation dynamique du nombre de pods selon la charge.

  • Rolling updates : mise à jour progressive sans interruption de service.

  • Auto-healing : détection et remplacement automatique des composants défaillants.

Nous avons rédigé un article détaillé sur les bénéfices business et les difficultés à anticiper avec Kubernetes.

Docker et Kubernetes : leur complémentarité

Comment Docker et Kubernetes interagissent

Docker et Kubernetes sont faits pour travailler ensemble. Docker est l’outil de référence pour construire les conteneurs, tandis que Kubernetes orchestre leur exécution à grande échelle.

Pendant longtemps, Kubernetes utilisait Docker comme moteur d’exécution des conteneurs (le “runtime”). Depuis la version 1.20, Kubernetes a migré vers containerd, un runtime plus léger et directement intégré à l’écosystème Cloud Native. Cette évolution technique ne remet pas en cause l’utilité de Docker dans les workflows modernes.

Aujourd’hui, Docker est principalement utilisé pour le build : il permet de créer des images fiables et cohérentes. Kubernetes prend ensuite le relais pour le run : il planifie, déploie, surveille et maintient ces conteneurs en production. C’est une séparation naturelle des rôles qui favorise la fluidité entre développement et exploitation.

Workflow simplifié d’une app conteneurisée: du build au run

  • a) Un développeur code une application et rédige un Dockerfile pour la conteneuriser ;

  • b) Une chaîne d’intégration continue (CI), comme GitLab CI ou GitHub Actions, génère une image Docker et la pousse dans un registre (Docker Hub, Quay, Harbor…) ;

  • c) Des fichiers de configuration Kubernetes (manifests YAML) définissent comment cette image doit être déployée dans le cluster ;

  • d) Kubernetes orchestre automatiquement le déploiement, en gérant la répartition de charge, les redémarrages. Il facilite également les mises à jour progressives.

  • e) L’application est également supervisée avec des technologies de monitoring et métrologie moderne cloud native (Prometheus, Thanos, Grafana).

Même s’il n’est pas toujours pertinent passer aux conteneurs pour ses applications (legacy très important, peu d’intérêt pour l’application à passer à une infra complexe pilotée par Kubernetes, etc.), ce workflow de développement d’une application est aujourd’hui devenu un standard dans les architectures modernes.

Conclusion

Docker et Kubernetes sont deux piliers de l’infrastructure moderne. Docker a révolutionné la manière dont les applications sont packagées et déployées via la conteneurisation. Kubernetes permet d’exploiter cette puissance à grande échelle, en apportant l’automatisation, la résilience et la scalabilité.

Ces technologies sont complémentaires, et leur maîtrise constitue un socle essentiel pour adopter des pratiques DevOps efficaces, construire des architectures Cloud Native et fiabiliser les déploiements.

Chez Enix, nous accompagnons nos clients dans la mise en place et l’exploitation en 24/7 de plateformes Kubernetes sur tout type d’environnement cloud (privé, public) ou on-premise avec une approche sur mesure. Nous proposons également des formations Docker et Kubernetes plebiscitées en France et dispensées par notre co-fondateur Jérôme Petazzoni, également l’un des créateurs de Docker.

N’hésitez pas à nous contacter pour discuter ensemble de vos projets !


Ne ratez pas nos prochains articles DevOps et Cloud Native! Suivez Enix sur Linkedin!