Skip to main content
Nous publions des mises à jour fréquentes de notre documentation, et la traduction de cette page peut encore être en cours. Pour obtenir les informations les plus actuelles, consultez la documentation anglaise.

Publication des images Docker

Vous pouvez publier des images Docker dans un registre, comme Docker Hub ou GitHub Packages, dans le cadre de votre workflow d’intégration continue (CI).

Remarque : Les exécuteurs hébergés sur GitHub ne sont pas pris en charge sur GitHub Enterprise Server. Vous pouvez voir plus d’informations sur le support futur planifié dans la GitHub public roadmap.

Introduction

Ce guide vous montre comment créer un workflow qui exécute une build Docker, puis publie des images Docker sur Docker Hub ou GitHub Packages. Avec un seul workflow, vous pouvez publier des images sur un registre unique ou sur plusieurs registres.

Remarque : Si vous souhaitez pousser des images vers un autre registre Docker tiers, l’exemple de la section « Publication d’images sur GitHub Packages » peut servir de modèle approprié.

Prérequis

Il est recommandé d’avoir une compréhension de base des options de configuration de workflows et de la création de fichiers de workflow. Pour plus d’informations, consultez « Découvrir GitHub Actions ».

Vous pouvez également trouver utile d’avoir une compréhension de base des éléments suivants :

À propos de la configuration d’une image

Ce guide suppose que vous disposez d’une définition complète pour une image Docker stockée dans un dépôt GitHub. Par exemple, votre dépôt doit contenir un Dockerfile et tous les autres fichiers nécessaires pour exécuter une build Docker pour créer une image.

Vous pouvez utiliser des clés d’annotation prédéfinies pour ajouter des métadonnées, notamment une description, une licence et un dépôt source, à votre image conteneur. Pour plus d’informations, consultez « Utilisation du Container registry ».

Dans ce guide, nous allons utiliser l’action Docker build-push-action pour générer l’image Docker et la pousser vers un ou plusieurs registres Docker. Pour plus d’informations, consultez build-push-action.

Remarque : GitHub Actions sur votre instance GitHub Enterprise Server peut avoir un accès limité aux actions sur GitHub.com ou GitHub Marketplace. Pour plus d’informations, consultez « Gestion de l’accès aux actions à partir de GitHub.com» et contactez votre administrateur de site GitHub Enterprise.

Publication d’images sur Docker Hub

Chaque fois que vous créez une mise en production sur GitHub Enterprise Server, vous pouvez déclencher un workflow pour publier votre image. Le workflow dans l’exemple ci-dessous s’exécute quand l’événement release se déclenche avec le type d’activité created. Pour plus d’informations sur l’événement release, consultez « Événements qui déclenchent des workflows ».

Dans l’exemple de workflow ci-dessous, nous utilisons les actions Docker login-action et build-push-action pour générer l’image Docker et, si la génération réussit, pousser l’image générée à Docker Hub.

Pour la pousser vers Docker Hub, vous devez disposer d’un compte Docker Hub et créer un dépôt Docker Hub. Pour plus d’informations, consultez « Envoi d’une image conteneur Docker à Docker Hub » dans la documentation Docker.

Les options login-action requises pour Docker Hub sont les suivantes :

  • username et password : il s’agit de vos nom d’utilisateur et mot de passe Docker Hub. Nous vous recommandons de stocker vos nom d’utilisateur et mot de passe Docker Hub en tant que secrets afin qu’ils ne soient pas exposés dans votre fichier de workflow. Pour plus d’informations, consultez « Création et utilisation de secrets chiffrés ».

L’option metadata-action requise pour Docker Hub est la suivante :

  • images : espace de noms et nom de l’image Docker que vous générez/poussez sur Docker Hub.

Les options build-push-action requises pour Docker Hub sont les suivantes :

  • tags : étiquette de votre nouvelle image au format DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION. Vous pouvez définir une étiquette unique comme indiqué ci-dessous ou spécifier plusieurs étiquettes dans une liste.
  • push : si la valeur est true, l’image est envoyée au registre si elle est générée avec succès.
YAML
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.

# GitHub recommande d’épingler les actions à un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: [self-hosted]
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3
      
      - name: Log in to Docker Hub
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: my-docker-hub-namespace/my-docker-hub-repository
      
      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Le workflow ci-dessus extrait le dépôt GitHub, utilise login-action pour se connecter au registre, puis l’action build-push-action pour : générer une image Docker basée sur le Dockerfile de votre dépôt, pousser l’image vers Docker Hub et appliquer une étiquette à l’image.

Publication d’images sur GitHub Packages

Remarque : Container registry est actuellement en version bêta pour GitHub Enterprise Server et susceptible d’être modifié.

GitHub Packages et l’isolation de sous-domaine doivent être activés pour utiliser Container registry. Pour plus d’informations, consultez « Utilisation du registre de conteneurs ».

Chaque fois que vous créez une mise en production sur GitHub Enterprise Server, vous pouvez déclencher un workflow pour publier votre image. Le workflow dans l’exemple ci-dessous s’exécute quand l’événement release se déclenche avec le type d’activité created. Pour plus d’informations sur l’événement release, consultez « Événements qui déclenchent des workflows ».

Dans l’exemple de workflow ci-dessous, nous utilisons les actions Docker login-action et build-push-action pour générer l’image Docker et, si la génération réussit, pousser l’image générée vers GitHub Packages.

Les options login-action requises pour GitHub Packages sont les suivantes :

  • registry : doit être défini sur containers.HOSTNAME.
  • username : vous pouvez utiliser le contexte ${{ github.actor }} pour employer automatiquement le nom d’utilisateur de l’utilisateur qui a déclenché l’exécution du workflow. Pour plus d’informations, consultez « Contextes ».
  • password : vous pouvez utiliser le secret GITHUB_TOKEN généré automatiquement pour le mot de passe. Pour plus d’informations, consultez « Authentification avec GITHUB_TOKEN ».

Les options build-push-action requises pour GitHub Packages sont les suivantes :

  • push : si la valeur est true, l’image est envoyée au registre si elle est générée avec succès.

  • tags: doit être défini au format containers.HOSTNAME/OWNER/REPOSITORY/IMAGE_NAME:VERSION.

    Par exemple, pour une image nommée octo-image stockée sur GitHub Enterprise Server à l’adresse https://HOSTNAME/octo-org/octo-repo, l’option tags devrait être définie sur containers.HOSTNAME/octo-org/octo-repo/octo-image:latest. Vous pouvez définir une étiquette unique comme indiqué ci-dessous ou spécifier plusieurs étiquettes dans une liste.

    YAML

Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.

Elles sont fournies par un tiers et régies par

des conditions d’utilisation du service, une politique de confidentialité et un support distincts.

documentation en ligne.

GitHub recommande d’épingler les actions à un SHA de commit.

Pour obtenir une version plus récente, vous devez mettre à jour le SHA.

Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Create and publish a Docker image

on: push: branches: ['release']

env: REGISTRY: containers.HOSTNAME IMAGE_NAME: ${{ github.repository }}

jobs: build-and-push-image: runs-on: [self-hosted] permissions: contents: read packages: write

steps:
  - name: Checkout repository
    uses: actions/checkout@v3

  - name: Log in to the Container registry
    uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
    with:
      registry: ${{ env.REGISTRY }}
      username: ${{ github.actor }}
      password: ${{ secrets.GITHUB_TOKEN }}

  - name: Extract metadata (tags, labels) for Docker
    id: meta
    uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
    with:
      images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

  - name: Build and push Docker image
    uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
    with:
      context: .
      push: true
      tags: ${{ steps.meta.outputs.tags }}
      labels: ${{ steps.meta.outputs.labels }}

Le workflow ci-dessus est déclenché par une poussée vers la branche « release ». Il extrait le dépôt GitHub et utilise `login-action` pour se connecter au Container registry. Il extrait ensuite les étiquettes et les intitulés pour l’image Docker. Enfin, il utilise l’action `build-push-action` pour générer l’image et la publier sur le Container registry.


## Publication d’images sur Docker Hub et GitHub Packages

 

<div class="extended-markdown note border rounded-1 mb-4 p-3 color-border-accent-emphasis color-bg-accent f5">

**Remarque** : Container registry est actuellement en version bêta pour GitHub Enterprise Server et susceptible d’être modifié. 

GitHub Packages et l’isolation de sous-domaine doivent être activés pour utiliser Container registry. Pour plus d’informations, consultez « [Utilisation du registre de conteneurs](/packages/working-with-a-github-packages-registry/working-with-the-container-registry) ».

</div>

 

Dans un seul workflow, vous pouvez publier votre image Docker sur plusieurs registres à l’aide des actions `login-action` et `build-push-action` pour chaque registre.

L’exemple de workflow suivant utilise les étapes des sections précédentes (« [Publication d’images sur Docker Hub](#publishing-images-to-docker-hub) » et « [Publication d’images sur GitHub Packages](#publishing-images-to-github-packages) ») pour créer un workflow unique qui envoie aux deux registres.

```yaml{:copy}
# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.

# GitHub recommande d’épingler les actions à un SHA de commit.
# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.
# Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registries:
    name: Push Docker image to multiple registries
    runs-on: [self-hosted]
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check out the repo
        uses: actions/checkout@v3
      
      - name: Log in to Docker Hub
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      
      - name: Log in to the Container registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: containers.HOSTNAME
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: |
            my-docker-hub-namespace/my-docker-hub-repository
            containers.HOSTNAME/${{ github.repository }}
      
      - name: Build and push Docker images
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Le workflow ci-dessus extrait le dépôt GitHub Enterprise Server, utilise login-action deux fois pour se connecter aux deux registres et génère des étiquettes et des intitulés avec l’action metadata-action. Ensuite, l’action build-push-action génère et envoie (push) l’image Docker vers Docker Hub et le Container registry.