Où sont stockées les images ?
Dans la leçon précédente, nous avons vu qu’un conteneur est créé à partir d’une image Docker.
Mais cela amène naturellement une autre question : Où trouve-t-on ces images ?
Contrairement à ce que l’on pourrait penser, les images ne se trouvent pas uniquement sur votre ordinateur. Elles sont généralement stockées dans des registres d’images Docker (appelés registries).
Un registre est tout simplement un serveur qui stocke et distribue des images Docker. C’est un peu comme un dépôt dans lequel on peut aller chercher les images dont on a besoin.
Le Docker Hub : le supermarché officiel
Le registre le plus connu est Docker Hub : hub.docker.com.
C’est la plateforme officielle proposée par la société derrière Docker.
On peut le voir comme le supermarché central des images Docker. Des milliers d’images y sont disponibles, prêtes à être téléchargées et utilisées immédiatement.
On y trouve notamment :
- des images officielles maintenues par Docker ou les éditeurs des logiciels
- des images créées par la communauté
- des images personnalisées publiées par des entreprises ou des développeurs
Par exemple, il existe des images prêtes à l’emploi pour :
- Apache
- Nginx
- MariaDB
- PostgreSQL
- WordPress
- Redis
Cela signifie qu’au lieu d’installer manuellement un logiciel sur un serveur, il suffit souvent de télécharger l’image correspondante et de lancer un conteneur.
Comment Docker trouve les images
Par défaut, lorsque vous utilisez une commande comme :
docker pull nginx
Docker va automatiquement chercher l’image sur Docker Hub.
En réalité, Docker interprète la commande comme ceci :
docker.io/library/nginx
Schéma simplifié :
Votre serveur
│
│ docker pull nginx
▼
Docker Hub
│
▼
Téléchargement de l'image
Une fois téléchargée, l’image est stockée localement sur votre machine et peut être utilisée pour lancer des conteneurs.
Il existe d’autres registres
Même si Docker Hub est le registre le plus populaire, il n’est pas le seul.
De nombreuses plateformes proposent également des registres d’images Docker. C’est notamment le cas de certains services utilisés par les développeurs.
Par exemple :
- GitHub Container Registry
- GitLab Container Registry
- Google Container Registry
- Amazon Elastic Container Registry (ECR)
Ces registres sont souvent utilisés pour publier ses propres images dans un projet ou une organisation.
Par exemple, lorsqu’une application est construite automatiquement via une chaîne CI/CD, l’image peut être publiée dans un registre GitHub ou GitLab afin d’être ensuite déployée sur des serveurs.
Héberger son propre registre
Dans certains contextes, il peut être intéressant d’héberger soi-même son registre d’images.
C’est souvent le cas dans :
- les entreprises
- les environnements internes
- les infrastructures isolées
- les projets nécessitant des images privées
Plusieurs solutions permettent de mettre en place un registre privé, comme par exemple :
- GitLab Container Registry
- Nexus Repository
- Harbor
- ou encore le registre officiel Docker Registry
L’intérêt est de pouvoir contrôler totalement ses images, gérer les accès et éviter de dépendre d’un service externe.
Télécharger une image depuis un autre registre
Lorsque l’image provient d’un autre registre que Docker Hub, il faut indiquer explicitement l’adresse du dépôt dans le nom de l’image.
La structure générale est la suivante :
registre/organisation/image:tagSchéma simplifié :
URL du registre
│
▼
registre/organisation/image:tag
│ │ │
│ │ └── version de l'image
│ └──────── nom de l'image
└───────────────────── registre
Exemple avec le registre de GitHub :
docker pull ghcr.io/organisation/mon-image:latest
Dans cet exemple :
ghcr.iocorrespond au registre GitHub Container Registryorganisationcorrespond au namespace ou projetmon-imageest le nom de l’imagelatestest le tag, c’est-à-dire la version de l’image
Si aucun tag n’est précisé, Docker utilisera par défaut latest.
Ce fonctionnement est identique pour tous les registres, qu’ils soient publics ou privés.
Attention aux limites de requêtes
Depuis plusieurs années, Docker Hub applique des limites de téléchargement d’images (rate limits). Cela signifie que le nombre de requêtes possibles peut être restreint selon le type de compte utilisé.
Par exemple, un utilisateur non authentifié peut être limité à un certain nombre de téléchargements d’images sur une période donnée. Les comptes authentifiés ou payants bénéficient généralement de limites plus élevées.
Ces limitations existent principalement pour éviter les abus et préserver les ressources de la plateforme.
⚠️ Important : ces limites peuvent évoluer dans le temps, il est donc toujours préférable de consulter la documentation officielle de Docker Hub pour connaître les valeurs exactes au moment où vous utilisez le service.
Dans des environnements avec beaucoup de déploiements (CI/CD, clusters, etc.), certaines organisations préfèrent d’ailleurs utiliser :
- un cache de registre
- ou un registre privé
afin de réduire le nombre de requêtes vers Docker Hub.