Aller au contenu

Créer et publier les images Docker

Le workflow suivant permet de créer et de publier une image Docker dans le registry de github :

.github/workflows/build.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
name: Create and publish a Docker image

on:
  workflow_dispatch:
  push:
    branches:
      - "main"
    tags:
      - "v*"
  pull_request:
    branches:
      - "main"

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  buildx:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v4
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v4
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v4
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v6
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
      - name: Build and push
        uses: docker/build-push-action@v7
        with:
          context: .
          platforms: linux/amd64,linux/arm64,linux/arm/v7
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Ce workflow est utilisé dans le projet demo-devops-actions-0 et nous vous invitons à consulter le résultat sous l’onglet Actions ainsi que dans le Package Registry

Le “Docker GitHub Builder”

Le Docker GitHub Builder est un projet de la communauté Docker qui fournit un workflow préconfiguré pour construire et publier des images Docker avec GitHub Actions. Par rapport au workflow précédent, il offre les avantages suivants :

  • Il est plus simple à utiliser et à configurer.
  • Il utilise les bonnes pratiques pour la construction et la publication d’images Docker.
  • Il permet de construire et de publier des images multi-architecture facilement.
  • Il est efficace et rapide car il distribue les tâches de construction sur plusieurs machines avec l’architecture correspondante (ARM ou AMD).

Voici un exemple de workflow qui utilise le Docker GitHub Builder pour construire et publier une image Docker multi-architecture dans le registry de github :

.github/workflows/build.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
name: Create and publish a Docker image

on:
  workflow_dispatch:
  push:
    branches:
      - "main"
    tags:
      - "v*"
  pull_request:
    branches:
      - "main"

jobs:
  build:
    uses: docker/github-builder/.github/workflows/build.yml@v1
    permissions:
      contents: read # to fetch the repository content
      packages: write
      id-token: write # for signing attestation(s) with GitHub OIDC Token
    with:
      output: image
      push: ${{ github.event_name != 'pull_request' }}
      platforms: linux/amd64,linux/arm64
      meta-images: |
        ghcr.io/${{ github.repository }}
      meta-tags: |
        type=ref,event=branch
        type=semver,pattern={{version}}
        type=raw,value=latest,enable={{is_default_branch}}
    secrets:
      registry-auths: |
        - registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

Ce workflow est utilisé dans le projet demo-devops-actions-1 et nous vous invitons à consulter le résultat sous l’onglet Actions ainsi que dans le Package Registry

Consultez les pages suivantes pour les explications :

Le “Dependabot”

Github propose aussi un outil de gestion des dépendances appelé Dependabot qui peut être utilisé pour maintenir à jour les images Docker utilisées dans votre projet. Son utilisation est très simple et il suffit de créer le fichier .github/dependabot.yml avec le contenu suivant :

.github/dependabot.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
version: 2
updates:
  - package-ecosystem: "gomod"
    directory: "/"
    schedule:
      interval: "weekly"
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"

L’exemple ci-dessus est fait pour un projet qui utilise des modules Go, des images Docker et des actions GitHub. Lisez la documentation officielle pour plus d’informations sur les options de configuration du fichier dependabot.yml :