Comment Publier une Image Docker sur Docker Hub ?
Blog, Développement, Tutoriels

Comment Publier une Image Docker sur Docker Hub ?

Vous avez une image Docker prête à l’emploi sur votre machine ? Vous cherchez un moyen simple de la partager avec votre équipe ou de la déployer sur un serveur ? Vous savez que Docker Hub est la solution, mais les étapes vous semblent floues ?

Cet article est un guide complet qui vous montre exactement comment faire. On va voir ensemble, étape par étape, comment publier votre image Docker sur Docker Hub, en partant de la méthode manuelle jusqu’à l’automatisation pour les projets plus sérieux.

Les prérequis avant de commencer

Avant de démarrer, assurez-vous d’avoir ces trois éléments. Ça vous évitera de rester bloqué en cours de route. La préparation est simple et rapide.

  • Avoir Docker installé et fonctionnel sur votre machine. Vous pouvez vérifier avec la commande `docker –version`.
  • Disposer d’une image Docker locale déjà construite. Pour lister vos images, utilisez la commande `docker images`.
  • Posséder un compte sur Docker Hub. Si ce n’est pas le cas, vous pouvez créer un compte gratuit sur Docker Hub.

Publier votre image sur Docker Hub : Le guide en 4 étapes

Le processus de publication est logique et se découpe en quatre actions claires. Chaque étape repose sur la précédente. En suivant cet ordre, vous ne pouvez pas vous tromper. On va voir chaque commande en détail pour que tout soit parfaitement clair.

Étape 1 : Créer votre dépôt (repository) sur Docker Hub

Votre image a besoin d’un espace de stockage en ligne. C’est le rôle du dépôt (ou « repository » en anglais) sur le site de Docker Hub. C’est la première chose à faire avant même d’ouvrir votre terminal.

Connectez-vous à votre compte Docker Hub. Sur le tableau de bord, cherchez et cliquez sur le bouton « Create Repository ». Vous devrez alors remplir quelques informations :

  • Nom du dépôt : Choisissez un nom simple et descriptif pour votre projet (par exemple, « mon-app-web »).
  • Visibilité : Vous avez deux choix. Public signifie que n’importe qui peut voir et télécharger votre image. Privé signifie que seuls vous et les personnes que vous autorisez y avez accès.

Une fois le dépôt créé, vous avez une destination pour votre image. C’est comme créer un dossier sur un disque dur partagé avant d’y copier un fichier. Le docker hub docker est maintenant prêt à recevoir votre image.

Étape 2 : Tagger correctement votre image locale

Cette étape est la plus importante du processus. Un mauvais tag, et la commande `push` échouera à coup sûr. Docker a besoin de savoir précisément où envoyer l’image. Le tag contient cette information.

Un tag Docker Hub doit obligatoirement suivre ce format : `votre-username/nom-du-depot:version`. Sans ça, Docker ne saura pas que l’image est destinée à Docker Hub et pensera qu’elle doit rester en local.

La commande à utiliser est `docker tag`. Elle ne modifie pas votre image existante, elle lui ajoute simplement une nouvelle étiquette. Voici la syntaxe :

docker tag IMAGE_SOURCE[:TAG] NOUVEAU_TAG_COMPLET

Exemple concret :

Imaginons que votre nom d’utilisateur sur Docker Hub soit « monuser » et que vous ayez une image locale nommée « mon-app » avec le tag « latest ». Vous avez créé un dépôt nommé « app-web » sur le hub. La commande de tag sera :

docker tag mon-app:latest monuser/app-web:1.0

Ici, `1.0` est la version. Utiliser des numéros de version est une bien meilleure pratique que de se contenter de « latest ».

Étape 3 : Se connecter et « pousser » l’image (`docker push`)

Maintenant que votre image est correctement taguée, il faut vous authentifier auprès de Docker Hub depuis votre terminal. Attention, la méthode a changé pour des raisons de sécurité. N’utilisez plus votre mot de passe docker hub directement.

Il est fortement recommandé d’utiliser un Personal Access Token (PAT). C’est un mot de passe d’application que vous pouvez générer dans les paramètres de sécurité de votre compte Docker Hub. C’est plus sûr car vous pouvez le révoquer à tout moment sans changer votre mot de passe principal. Le mot de passe docker classique est déprécié.

Une fois votre token généré, lancez la commande de connexion :

docker login

Docker vous demandera votre `username` et votre `password`. Pour le mot de passe, collez le Personal Access Token que vous venez de créer. Si la connexion réussit, vous êtes prêt à envoyer l’image.

La dernière commande est `docker push`. Elle envoie l’image taguée vers le dépôt Docker Hub correspondant.

docker push monuser/app-web:1.0

Le terminal va afficher la progression de l’envoi, couche par couche. Une fois terminé, votre image docker est en ligne.

Étape 4 : Vérifier la publication de votre image

L’image est envoyée, mais comment être certain que tout fonctionne ? Il y a deux façons de vérifier.

La première est la plus simple : retournez sur votre navigateur, sur la page de votre dépôt Docker Hub. Rafraîchissez la page et vous devriez voir le nouveau tag (par exemple, `1.0`) apparaître dans la liste. C’est une bonne première confirmation.

La deuxième méthode est plus fiable car elle simule ce que ferait un autre utilisateur ou un serveur. Essayez de télécharger l’image que vous venez de publier avec la commande `docker pull`.

docker pull monuser/app-web:1.0

Si Docker télécharge l’image sans erreur, c’est la confirmation que votre image est bien publiée et accessible publiquement (ou en privé si vous avez les bons droits).

Aller plus loin : Automatiser la publication avec CI/CD (GitHub Actions)

Publier une image docker manuellement, c’est bien pour commencer. Mais dans un projet professionnel, vous voudrez que ce processus soit automatique à chaque nouvelle version de votre code. C’est le rôle de l’intégration et du déploiement continus (CI/CD). On va voir comment faire avec GitHub Actions, un outil très populaire et intégré à GitHub.

Pourquoi automatiser vos publications ?

L’automatisation du build et du push de vos images Docker vous apporte plusieurs avantages :

  • Gain de temps : Plus besoin de lancer les commandes manuellement.
  • Fiabilité : Le processus est toujours le même, ce qui réduit les risques d’erreur humaine (oubli d’un tag, mauvaise version…).
  • Cohérence : Chaque `push` sur votre branche `main` peut déclencher la création d’une nouvelle image, garantissant que votre image Docker Hub est toujours à jour.

Configurer les secrets sur GitHub

Vous ne devez jamais écrire vos identifiants en clair dans vos fichiers de code. GitHub propose une solution sécurisée : les « Secrets ». Vous allez y stocker votre username et votre token Docker Hub.

Dans votre dépôt GitHub, allez dans `Settings` > `Secrets and variables` > `Actions`. Créez deux nouveaux « repository secrets » :

  • `DOCKERHUB_USERNAME` : Votre nom d’utilisateur Docker Hub.
  • `DOCKERHUB_TOKEN` : Votre Personal Access Token (PAT) généré sur Docker Hub.

Créer le fichier de workflow

GitHub Actions fonctionne avec des fichiers de configuration au format YAML. Vous devez créer un dossier `.github/workflows/` à la racine de votre projet. À l’intérieur, créez un fichier nommé `docker-publish.yml`.

Ce fichier décrira toutes les étapes que GitHub doit suivre pour construire et publier votre image Docker. C’est la recette de votre automatisation.

Exemple de fichier de workflow commenté

Voici un exemple complet de fichier `docker-publish.yml` qui utilise des actions de la communauté pour simplifier le processus. L’action la plus connue est l’action `build-push-action` qui gère tout pour nous.

# Nom du workflow qui apparaîtra dans l’onglet « Actions » de GitHub name: Build and Push Docker Image # Déclencheur : ce workflow s’exécute à chaque push sur la branche « main » on: push: branches: [ « main » ] # Variables d’environnement globales pour le workflow env: REGISTRY: docker.io IMAGE_NAME: ${{ github.repository }} # Définition des jobs à exécuter jobs: build-and-push: # Utilise la dernière version d’Ubuntu pour exécuter le job runs-on: ubuntu-latest # Permissions nécessaires pour que le job puisse interagir avec le repo permissions: contents: read packages: write # Étapes du job steps: # 1. Récupère le code de votre dépôt – name: Checkout repository uses: actions/checkout@v3 # 2. Se connecte à Docker Hub en utilisant les secrets configurés – name: Log in to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} # 3. Extrait les métadonnées (tags et labels) pour l’image – name: Extract metadata (tags, labels) id: meta uses: docker/metadata-action@v4 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} # 4. Construit l’image et la pousse sur Docker Hub – name: Build and push Docker image id: build-push uses: docker/build-push-action@v4 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}

Avec ce fichier en place, chaque fois que vous ferez un `git push` sur votre branche `main`, GitHub Actions se chargera de construire et publier une nouvelle version de votre image docker sur Docker Hub. C’est simple, efficace et professionnel.

Bonnes pratiques et erreurs à éviter

Publier des images docker est simple, mais quelques bonnes habitudes peuvent vous éviter des problèmes plus tard. Voici les points essentiels à garder en tête.

  • Utilisez des tags de version spécifiques. Le tag `latest` est un piège. Il est constamment écrasé et il est impossible de savoir à quelle version du code il correspond. Préférez des tags de version clairs comme `1.0.0`, `1.0.1`, `1.1.0`, qui suivent la sémantique de versionnement.
  • Attention au rate limiting. Docker Hub limite le nombre de téléchargements d’images pour les comptes gratuits (environ 200 pulls toutes les 6 heures par adresse IP). Si vous travaillez en équipe ou avec des systèmes d’intégration continue, vous pouvez atteindre cette limite. Un compte payant lève ces restrictions.
  • Sécurisez vos identifiants. On l’a déjà dit, mais c’est crucial : utilisez toujours des Personal Access Tokens (PAT) et ne les stockez jamais en clair dans vos fichiers. Utilisez les systèmes de secrets de vos outils CI/CD.
  • Optimisez la taille de vos images. Avant de publier, essayez de réduire la taille de votre image (en utilisant des images de base plus petites comme `alpine`, ou des builds multi-étapes). Des images plus légères sont plus rapides à télécharger et à déployer, et elles coûtent moins cher en stockage.

FAQ – Publier une image sur Docker Hub

Comment publier une image Docker en mode privé ?

C’est très simple. Au moment de la création de votre dépôt sur le site de Docker Hub (étape 1), il suffit de cocher l’option « Privé » au lieu de « Public ». Le reste du processus (tag, login, push) est identique. Seules les personnes que vous autorisez pourront accéder à cette image.

Comment mettre à jour une image déjà publiée ?

Pour mettre à jour une image, vous devez publier une nouvelle version avec un nouveau tag. Le processus est le suivant : modifiez votre code, reconstruisez votre image Docker localement (`docker build`), taguez cette nouvelle image avec une nouvelle version (ex: `monuser/app-web:1.1`), puis faites un `docker push`. Ne poussez jamais par-dessus le même tag de version.

Puis-je supprimer une image de Docker Hub ?

Oui, vous pouvez supprimer un tag spécifique ou même un dépôt entier. Cela se fait directement depuis l’interface web de Docker Hub. Allez dans votre dépôt, sélectionnez l’onglet « Tags », et vous aurez l’option de supprimer les tags que vous ne voulez plus. Pour supprimer tout le dépôt, allez dans les paramètres du dépôt.

Docker Hub est-il gratuit ?

Oui, Docker Hub propose un compte gratuit généreux. Il inclut des dépôts publics illimités et un dépôt privé gratuit. Le compte gratuit est cependant soumis à des limitations, notamment le « rate limiting » sur les téléchargements d’images. Des plans payants existent pour les équipes et les entreprises qui ont besoin de plus de dépôts privés et de fonctionnalités avancées.

Quelle est la différence entre `docker tag` et renommer une image ?

C’est une confusion fréquente. La commande `docker tag` ne renomme pas une image existante. Elle crée un alias, une sorte de pointeur ou d’étiquette supplémentaire vers la même image. Une seule image peut donc avoir plusieurs tags (par exemple, `monuser/app-web:1.1` et `monuser/app-web:latest` peuvent pointer sur la même image). Renommer n’est pas une opération courante dans Docker ; on préfère créer de nouveaux tags.

Vous pourriez également aimer...