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