Le 15 mars 2013, à Santa Clara, en Californie, un homme né en 1983 à New York et élevé en France ouvre son ordinateur portable devant le public de PyCon, la conférence des programmeurs Python. Il s'appelle Solomon Hykes, il dirige une petite société d'hébergement nommée dotCloud, et il dispose de cinq minutes, le format du « lightning talk ». Le titre annoncé : « The future of Linux Containers ». À l'écran, il lance un « hello world » dans ce qu'il appelle un conteneur. Puis un deuxième. Puis un troisième, en quelques secondes. L'outil s'appelle Docker, dotCloud s'en sert en interne, et il va être publié en open source. Cinq minutes plus tard, il descend de scène.

dotCloud vend de l'hébergement d'applications, à la manière d'Heroku. La société est née en 2008 à Montrouge, au sud de Paris, autour de Hykes, ancien d'Epitech, de Sébastien Pahl et de Kamel Founadi ; elle est passée par Y Combinator à l'été 2010 et s'est installée en Californie en janvier 2011. Docker est l'outil maison. Le code est publié en mars 2013. Le 29 octobre, dotCloud change de nom et devient Docker, Inc. L'outil interne a mangé l'entreprise.

« Ça marche sur ma machine »

Le problème que Docker attaque porte un nom de blague. Le 15 mars 2007, six ans jour pour jour avant la démo de Santa Clara, Jeff Atwood publie sur son blog Coding Horror un écusson « Works on My Machine », d'après une idée du développeur Joseph Cooney. La certification s'obtient en quatre étapes : compiler son code (récupérer les modifications des collègues est facultatif), lancer le programme, faire passer un seul cas, le plus simple possible, et envoyer le tout dans le dépôt commun. Un programme dépend de dizaines de bibliothèques, de variables de configuration, de fichiers posés au bon endroit. Sur le poste du développeur, tout est là. Sur le serveur, il manque toujours quelque chose.

Le moule et la boîte

Docker propose deux objets. L'image est un moule : une description figée, en lecture seule, de tout ce dont le programme a besoin : système de fichiers, bibliothèques, configuration, commande de démarrage. Le conteneur est ce qu'on coule dans le moule : une copie vivante de l'image, qui tourne, qu'on arrête, qu'on jette, qu'on relance à l'identique. On construit l'image une fois, on la dépose dans un entrepôt, le registre, et n'importe quelle machine équipée de Docker la fait tourner telle quelle. Ce qui marchait sur ma machine marche sur la machine d'à côté, parce que c'est la même boîte.

La différence avec une machine virtuelle tient à ce qu'on emporte. Une machine virtuelle transporte un ordinateur entier, noyau compris : une maison posée sur un camion. Un conteneur ne transporte que l'appartement, avec sa porte, son compteur et sa serrure ; l'immeuble, le noyau Linux de la machine hôte, est partagé entre tous les locataires. D'où des démarrages en quelques secondes.

Cette plomberie existait déjà. Les espaces de noms, qui donnent à chaque conteneur sa propre vue des fichiers, des processus et du réseau, entrent dans le noyau Linux entre 2002 et 2013. Les cgroups, qui plafonnent la mémoire et le processeur d'un groupe de processus, ont été écrits chez Google par Paul Menage et Rohit Seth à partir de 2006 et fusionnés dans le noyau 2.6.24 en janvier 2008. LXC, publié le 6 août 2008, assemblait déjà le tout, et Docker s'est d'abord posé dessus avant de le remplacer par sa propre bibliothèque dans la version 0.9, le 10 mars 2014. L'apport de Docker n'est pas le moteur, c'est l'emballage.

Une baleine qui porte des boîtes

Le nom vient des dockers ; le logo, une baleine portant des conteneurs, dit le reste. L'idée est revendiquée dès la démo de PyCon : transposer au logiciel le conteneur de transport. Le 26 avril 1956, l'Ideal-X, un pétrolier reconverti, quitte Newark, dans le New Jersey, pour Houston avec 58 caisses métalliques de 35 pieds sur le pont. Malcom McLean, son armateur, a fait le calcul : charger un navire à la main coûte 5,86 dollars la tonne, 16 cents avec des caisses. Il faudra une douzaine d'années pour que les dimensions et les coins de levage soient normalisés par l'ISO, entre 1968 et 1970. Depuis, une grue de Rotterdam soulève sans la regarder une boîte fermée à Hong Kong.

Le conteneur n'a pas rendu les navires plus rapides. Il a rendu le chargement indifférent à ce qu'il y avait dedans.

C'est la promesse de Docker : le serveur n'a plus besoin de savoir ce que contient la boîte. Il sait l'ouvrir, c'est tout.

* * *

San Francisco, 9 juin 2014

Quinze mois après Santa Clara, Docker tient sa première conférence, DockerCon, à San Francisco, les 9 et 10 juin 2014. Le directeur général, Ben Golub, ouvre par la version 1.0, la première que la société déclare prête pour la production. Le projet compte plus de 450 contributeurs, dont près de 400 extérieurs à l'entreprise, et revendique 2,75 millions de téléchargements. Le même jour ouvre Docker Hub, l'entrepôt public d'images. Dans un communiqué, Hykes glisse une phrase :

Nous saluons aussi les nombreuses entreprises qui ont ignoré nos mises en garde sur la « production readiness ».

Le lendemain, Eric Brewer, de Google, monte sur la même scène avec un chiffre : Google lance plus de deux milliards de conteneurs par semaine, avec un système interne nommé Borg. Il présente Kubernetes, un outil ouvert pour orchestrer des flottes de conteneurs, dont le premier commit public date du 6 juin, quatre jours plus tôt. La version 1.0 arrivera le 21 juillet 2015, le jour où Google confie le projet à une fondation créée pour lui, la Cloud Native Computing Foundation. Un mois avant, le 22 juin 2015, Docker avait donné son format de conteneur et son moteur d'exécution, runc, à l'Open Container Initiative. Le moment ISO du conteneur logiciel, à ceci près qu'il a pris deux ans au lieu de douze.

La baleine n'a pas gardé la cargaison

En avril 2015, Docker lève 95 millions de dollars et dépasse le milliard de valorisation. La question n'est plus la boîte, ce sont les navires : qui organise leur transport ? Docker pousse son propre orchestrateur, Swarm. Google pousse Kubernetes, et en 2017 Amazon, Microsoft et Oracle rejoignent la fondation qui l'héberge. Le 17 octobre 2017, à DockerCon Europe, à Copenhague, Docker annonce que ses propres produits embarqueront Kubernetes à côté de Swarm, « le Kubernetes vanille que tout le monde connaît, tout droit sorti de la CNCF », écrit Hykes. La bataille est finie.

Le 28 mars 2018, il publie un billet titré « Au revoir ».

Aujourd'hui, j'annonce mon départ de Docker, la société que j'ai aidé à créer il y a dix ans et que je construis depuis.

Le 13 novembre 2019, Docker vend son activité entreprise, environ 300 salariés et 700 clients, à Mirantis, pour un montant tenu secret, et se recentre sur Docker Desktop et Docker Hub. Le 31 mars 2022, la société lève encore 105 millions, à 2,1 milliards de valorisation. Elle existe, elle facture, elle n'a simplement pas capturé ce qu'elle avait déclenché. L'enquête annuelle de la CNCF mesure en 2024 que 80 % des organisations interrogées font tourner Kubernetes en production, et 91 % des conteneurs. La boîte est devenue un standard ouvert, et un standard ouvert n'appartient à personne, pas même à la baleine.

* * *

Ce qu'il y a dans les boîtes aujourd'hui

En mars 2024, Docker Hub comptait 15 millions de dépôts, 17 millions de développeurs inscrits et 25 milliards de téléchargements d'images par mois. Les trois grands clouds vendent chacun un Kubernetes géré, et les modèles d'intelligence artificielle n'y échappent pas : le serveur d'inférence de Hugging Face, le programme qui fait répondre un modèle déjà entraîné, se lance d'une seule commande Docker, carte graphique et nom du modèle en paramètres.

Le 15 mars 2013, Solomon Hykes avait cinq minutes, un portable et une poignée de conteneurs. Le logo n'a pas changé de sujet depuis juin 2013 : une baleine, des boîtes empilées. Ce sont les navires qui ont changé de pavillon.