使用 GitHub Actions 的命名上下文
目录
你可定义
附加构建上下文,
并在 Dockerfile 中使用 FROM name 或 --from=name 访问。当
Dockerfile 定义的阶段名称与之相同时,它将被覆盖。
这在使用 GitHub Actions 时很有用,可以重用其他构建的结果或将镜像固定到工作流中的特定标签。
将镜像固定到标签
将 alpine:latest 替换为固定的一个:
# 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在后续步骤中使用镜像
默认情况下,
Docker 设置 Buildx
操作使用 docker-container 作为构建驱动程序,因此构建的 Docker 镜像不会自动加载。
使用命名上下文,您可以重用构建的镜像:
# 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与容器构建器一起使用
如前一节所示,我们在使用命名上下文构建时并未使用默认的
docker-container 驱动程序。这是因为该驱动程序无法从 Docker 仓库加载镜像,因为它处于隔离状态。为了解决这个问题,你可以在工作流中使用
本地注册表
来推送你的基础镜像:
# 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