Contextos con nombre con GitHub Actions
Puedes definir
contextos de compilación adicionales
y acceder a ellos en tu Dockerfile con FROM nombre o --from=nombre. Cuando el
Dockerfile define una etapa con el mismo nombre, esta se sobrescribe.
Esto puede ser útil con GitHub Actions para reutilizar resultados de otras compilaciones o fijar una imagen a una etiqueta específica en tu flujo de trabajo.
Fijar una imagen a una etiqueta
Reemplaza alpine:latest con una versión fija:
# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello World"name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Compilar
uses: docker/build-push-action@v7
with:
build-contexts: |
alpine=docker-image://alpine:3.23
tags: myimage:latestUsar una imagen en pasos posteriores
Por defecto, la acción Docker Setup Buildx
utiliza docker-container como controlador de compilación, por lo que las imágenes de Docker compiladas no se cargan automáticamente.
Con contextos con nombre puedes reutilizar la imagen compilada:
# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello World"name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v4
with:
driver: docker
- name: Compilar imagen base
uses: docker/build-push-action@v7
with:
context: "{{defaultContext}}:base"
load: true
tags: my-base-image:latest
- name: Compilar
uses: docker/build-push-action@v7
with:
build-contexts: |
alpine=docker-image://my-base-image:latest
tags: myimage:latestUso con un constructor de contenedores
Como se muestra en la sección anterior, no se utiliza el controlador predeterminado
docker-container driver para compilar con
contextos con nombre. Esto se debe a que este controlador no puede cargar una imagen desde el almacén de Docker ya que está aislado. Para solucionar este problema, puedes usar un registro local para enviar tu imagen base en tu flujo de trabajo:
# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello World"name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
services:
registry:
image: registry:3
ports:
- 5000:5000
steps:
- name: Configurar QEMU
uses: docker/setup-qemu-action@v4
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v4
with:
# Se necesita driver-opts con network=host para enviar al registro local
driver-opts: network=host
- name: Compilar imagen base
uses: docker/build-push-action@v7
with:
context: "{{defaultContext}}:base"
tags: localhost:5000/my-base-image:latest
push: true
- name: Compilar
uses: docker/build-push-action@v7
with:
build-contexts: |
alpine=docker-image://localhost:5000/my-base-image:latest
tags: myimage:latest