⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Named contexts with GitHub Actions

Vous pouvez définir des contextes de construction supplémentaires, et y accéder dans votre Dockerfile avec FROM name ou --from=name. Quand le Dockerfile définit une étape avec le même nom, elle est écrasée.

Ceci peut être utile avec GitHub Actions pour réutiliser les résultats d'autres constructions ou épingler une image à un tag spécifique dans votre workflow.

Épingler une image à un tag

Remplacer alpine:latest par une version épinglée :

# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello World"
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build
        uses: docker/build-push-action@v6
        with:
          build-contexts: |
            alpine=docker-image://alpine:3.21
          tags: myimage:latest

Utiliser l'image dans les étapes suivantes

Par défaut, l'action Docker Setup Buildx utilise docker-container comme pilote de construction, donc les images Docker construites ne sont pas chargées automatiquement.

Avec les contextes nommés, vous pouvez réutiliser l'image construite :

# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello World"
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          driver: docker

      - name: Build base image
        uses: docker/build-push-action@v6
        with:
          context: "{{defaultContext}}:base"
          load: true
          tags: my-base-image:latest

      - name: Build
        uses: docker/build-push-action@v6
        with:
          build-contexts: |
            alpine=docker-image://my-base-image:latest
          tags: myimage:latest

Utilisation avec un constructeur de conteneur

Comme montré dans la section précédente, nous n'utilisons pas le pilote par défaut docker-container pour construire avec les contextes nommés. C'est parce que ce pilote ne peut pas charger une image depuis le magasin Docker car il est isolé. Pour résoudre ce problème, vous pouvez utiliser un registre local pour pousser votre image de base dans votre workflow :

# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello World"
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    services:
      registry:
        image: registry:2
        ports:
          - 5000:5000
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
        with:
          # network=host driver-opt needed to push to local registry
          driver-opts: network=host

      - name: Build base image
        uses: docker/build-push-action@v6
        with:
          context: "{{defaultContext}}:base"
          tags: localhost:5000/my-base-image:latest
          push: true

      - name: Build
        uses: docker/build-push-action@v6
        with:
          build-contexts: |
            alpine=docker-image://localhost:5000/my-base-image:latest
          tags: myimage:latest