Publié le 15 juillet 2019, mis à jour le 28 mai 2024.
En réalité, ils ne sont pas vraiment comparables : ils vous aident tous les deux à “runner” votre application, mais de manière et dans des contextes différents. Dans cet article, on vous en dit plus sur Docker, Kubernetes et comment les utiliser ensemble.
Qu’est-ce que Docker ?
Docker est une technologie de conteneurs lancée en 2013 par la société du même nom. Il en existe deux versions : la version “Enterprise” et la version “Community” (suffisante dans la plupart des cas).
Un conteneur est une manière de virtualiser un système (OS) pour “runner” une application. Vous pouvez facilement packager votre code applicatif, ses configurations et dépendances. Ensuite, vous pouvez construire et lancer cette image rapidement et n’importe où.
La technologie coeur de Docker repose sur la commande linux chroot et les cgroups. Le premier permet à un dossier du filesystem d’être considéré comme un dossier racine et donc d’être isolé du reste du système. Le second limite les ressources du premier.
On fait souvent référence à Docker comme la “nouvelle machine virtuelle”, les conteneurs étant plus légers et plus rapides. La principale cause étant l’absence de “Guest Operating System” dans un conteneur.
Les conteneurs Docker permettent aux équipes de limiter le fossé entre les environnements de développement, de validation et de production. Cela permet de reléguer au passé le célèbre “ça marche sur ma machine”. De plus, comme cela utilise moins de ressources, il est plus simple de scaler, un conteneur pouvant être lancé en quelques secondes.
source : Tech Target
Qu'est-ce que Kubernetes ?
Kubernetes est un outil d’orchestration lancé par Google en 2014, principalement inspiré par un outil interne appelé Borg. Borg était un système de management de clusters, capable de gérer des milliers de tâches. C’est un énorme projet open source, faisant partie du top 10 des projets Github, auquel plus de 2000 personnes ont contribué.
De plus, il y a un grand éco-système autour de Kubernetes géré par the Cloud Native Computing Foundation avec des outils de monitoring comme Prometheus, de logging comme Fluentd, ou de management de package comme Helm.
Garder des conteneurs actifs est difficile, et c’est la raison de l’existence de Kubernetes. Comme Kubernetes déclare le nombre requis d’instances d’un conteneur, si un de ces derniers crashe, un nouveau sera automatiquement créé et intégré au réseau existant grâce à une puissante feature d’auto-discovery.
Vous pouvez également déployer plusieurs instances de vos conteneurs au sein d'un même cluster Kubernetes afin de répartir leur charge de travail.
Par ailleurs, cela vous permet de faire des “canary releases”, ou des “rolling updates” facilement, ainsi l’objectif d’avoir “0 downtime” n’est plus mis en danger par un déploiement.
D’autres orchestrateurs de conteneurs existent, comme Docker Swarm, mais ils ne sont pas aussi puissants que Kubernetes. Leur management des secrets ou leurs services de load-balancing ne sont pas aussi complets que ceux proposés par Kubernetes.
Par ailleurs, tous les grands fournisseurs de cloud proposent des services managés pour Kubernetes : AKS pour Azure, GKE pour Google Cloud Platform et EKS pour AWS.
source : Supinfo
Comment utiliser Docker et Kubernetes ensemble ?
Un bon moyen de visualiser le lien entre Docker et Kubernetes est de regarder un fichier de déploiement :
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort:80
Ce fichier décrit une partie d’un cluster Kubernetes, notamment le nombre de pods en activité. En dessous de la directive des conteneurs, on trouve celle des images qui est la référence à l’image docker des instances Docker qui tournent dans les pods.
En résumé, Docker et Kubernetes ne poursuivent pas le même objectif : Docker vous permet de développer, déployer et donc itérer plus vite sur votre produit, tandis que Kubernetes est la solution pour le “runner” sans danger en production. Si vous avez encore des questions sur la différence entre ces deux technologies ou comment migrer sur Kubernetes et Docker, contactez-nous.
Cet article est également disponible en anglais.