Docker est un utilitaire pour packager et exécuter des conteneurs. Il aide à créer des conteneurs standard qui incluent tous les composants nécessaires pour qu’ils fonctionnent de manière isolée, y compris le code, les dépendances et les bibliothèques. Docker est techniquement plus un outil de gestion de conteneur qu’un format de conteneur.
Les développeurs interagissent généralement avec Docker via une interface de ligne de commande (CLI) pour communiquer avec le client Docker afin d’exécuter des commandes. Celles-ci sont traduites en commandes d’API vers le démon Docker dockerd, qui dirige le système pour créer l’environnement. Un registre Docker stocke des images Docker, qui sont des modèles exécutables. Ainsi, les conteneurs Docker sont essentiellement des instances de ces images.
Docker a été initialement développé en 2013 et a initié le mouvement moderne des conteneurs. Le format d’image Docker a été proposé en tant que standard ouvert et est maintenant appelé Open Container Initiative (OCI). Lorsque les gens discutent des conteneurs Docker, ils se réfèrent généralement à Docker, l’outil de conditionnement de conteneurs. Cela ne doit pas être confondu avec Docker Inc., la société.
Depuis quelques années Kubernetes est devenu la préférence pour de nombreuses grandes entreprises pour la gestion des conteneurs. Souvent abrégé en K8s, il a d’abord été développé en tant qu’outil interne appelé Borg chez Google et est devenu open source en 2014. Parmi les batailles d’orchestrateurs de conteneurs, Kubernetes est sorti victorieux en tant que plate-forme leader, battant Apache Mesos, Docker Swarm et Nomad. K8s est un projet de la Cloud Native Computing Foundation (CNCF) depuis 2018.
Même si l’avenir de Docker Swarm a été maintes fois discuté ces dernières années, la société Mirantis Inc. affirmait le 24 février 2020 :
Chez Mirantis, nous sommes ravis d’annoncer la continuité de notre support pour Docker Swarm, tout en investissant dans de nouvelles fonctionnalités demandées par les clients. Suite à notre acquisition de Docker Enterprise en novembre 2019, nous avons affirmé au moins deux ans de support continu de Swarm, en attendant les discussions avec les clients. Ces conversations nous ont amenés à la conclusion que nos clients veulent toujours un support de Swarm sans date de fin implicite. L’objectif de Mirantis est de simplifier l’utilisation des conteneurs à l’échelle de l’entreprise avec une liberté de choix pour les orchestrateurs. Swarm a fait ses preuves dans l’exécution de charges de travail de conteneurs critiques dans des environnements de production exigeants, et nos clients peuvent être assurés que Mirantis continuera à soutenir leurs investissements dans Swarm. À cette fin, Mirantis continuera d’investir dans le développement actif de Swarm. Récemment, Mirantis a développé Swarm Jobs, un nouveau mode de service permettant des charges de travail run-and-done sur un cluster Swarm. De plus, Mirantis est très heureux d’annoncer son engagement dans le développement du support de volume de cluster avec les plugins CSI. Initialement discutée lors de la DockerCon 2019, cette proposition de développement a reçu des retours très positifs de la part de la communauté. En tirant parti de l’architecture du plug-in Container Storage Interface, Swarm pourra utiliser l’écosystème CSI en pleine croissance pour gérer des volumes persistants distribués, prenant en charge une plus large gamme d’options de stockage backend et une planification plus flexible et intelligente.
Rick. Pugh
Même si la bataille des orchestrateurs aurait pu laisser penser que Kubernetes allait supplanter Docker pour les approches NetDevOps, force est de constater que ce n’est pas le cas. Docker Inc. annonce de la croissance depuis 2019 et a même réussi plusieurs levées de fonds dont la dernière en mars 2022. Il convient, également, de se rappeler que Kubernetes est né chez Google et que Google gère des milliards de conteneurs chaque semaine. Ils ont construit la plate-forme en pensant à une utilisation massive à l’échelle de l’entreprise. L’approche Kubernetes peut donc être exagérée pour les petits projets. Kubernetes nécessite également une formation initiale importante et, une fois en cours d’exécution, il peut être difficile de le maintenir et de le mettre à jour au fil du temps, en particulier lors de la gestion de nombreux clusters.
L’outil Docker continue à évoluer. L’introduction de la spécification Compose, en avril 2020, établit une distinction nette entre le modèle de fichier Compose YAML et l’implémentation docker-compose déjà connue. Cette modification a permis un certain nombre d’améliorations, notamment l’ajout de la commande compose
directement dans la CLI Docker. Au fur et à mesure que la spécification Compose évolue, de nouvelles fonctionnalités arrivent plus rapidement dans la CLI Docker.
Compose V2 s’appuie directement sur les liaisons compose-go qui sont maintenues dans le cadre de la spécification. Compose V2 prend également en charge certains des ajouts les plus récents à la spécification, tels que les profils et les périphériques GPU. Compose V2 a été réécrit en Go, ce qui améliore l’intégration avec d’autres fonctionnalités de ligne de commande Docker et lui permet de s’exécuter nativement sur macOS sur Apple Silicon, Windows et Linux, sans dépendances telles que Python. Il n’est plus nécessaire d’installer la suite Python docker-compose. Compose se présente sous la forme d’un plugin Docker qui s’installe simplement à l’aide de la commande sudo apt-get install docker-compose-plugin
.
Il n’est plus nécessaire de nommer le fichier de configuration docker-compose.yml
, seul compose.yaml
ou compose.yml
est suffisant. De même, la commande pour exécuter le fichier se présente sous la forme docker compose up -d
Les spécifications Compose disponibles dans Docker sont présentées dans la documentation officielle. Dans la version utilisée pour l’écriture de cet article (Docker Compose version v2.5.0), les commandes disponibles sont les suivantes :
build | Build or rebuild services |
convert | Converts the compose file to platform’s canonical format |
cp | Copy files/folders between a service container and the local filesystem |
create | Creates containers for a service |
down | Stop and remove containers, networks |
events | Receive real time events from containers |
exec | Execute a command in a running container |
images | List images used by the created containers |
kill | Force stop service containers |
logs | View output from containers |
ls | List running compose projects |
pause | Pause services |
port | Print the public port for a port binding |
ps | List containers |
pull | Pull service images |
push | Push service images |
restart | Restart containers |
rm | Removes stopped service containers |
run | Run a one-off command on a service |
start | Start services |
stop | Stop services |
top | Display the running processes |
unpause | Unpause services |
up | Create and start containers |
version | Show the Docker Compose version information |
La majorité des fonctions qui étaient supportées par l’outil Python docker-compose
sont compatibles avec le plugin docker compose
écrit en Go.