问题
我有一个多阶段(两个阶段)的 Docker 构建容器,让我们称其为cont
,我希望通过 GitHub Actions 自动化此过程。构建过程的第一个阶段/docker-image 很少更改,并且构建时间很长; 我们将其称为cont-build
。我想通过不每次构建整个项目时都构建cont-build
来减少构建时间。
在本地运行该构建时,我可以通过本地 Docker 实例轻松获得cont-build
镜像。 我很难将这种简单的可用性转移到 GitHub Actions 中。
我查看了 Docker 和 GitHub 文档,但无法找到实现它的方法。 在本地机器上如此简单,所以我认为在 GitHub-Actions 上也不应该太难...
方法
为了保持cont-build
图像,似乎有不同的方法
- 使用某种 GitHub 缓存。我不确定图像缓存的持续时间。
- 从 DockerHub 拉取镜像,在构建时间很长的情况下可能比构建更快
对于我来说,第二个方法似乎更直截了当而且不太复杂。因此,我的方法是将cont-build
发布到 DockerHub,并在每次构建cont
时从 DockerHub 拉取cont-build
。
我尝试使用uses: Docker://${{ secrets.DOCKERHUB_USERNAME }}/cont-build
,但不知道应该把它放在哪里。
问题
我应该在何处/如何拉取所需的Dockerfile-cont
“构建和推送”中需要的cont-build
镜像? 此外,如果我的方法不好,那么对于一个构建的其中一个阶段很少更改的多阶段构建,特别是考虑到 GitHub 缓存可能在一段时间后被删除,整个通用方法是什么?
我意识到可以在Dockerfile-cont
中使用类似于FROM mydockerID/cont-build:latest
的东西,但这似乎不是利用整个 GitHub-Workflow 环境的解决方案。这还意味着我必须以明文输入我的 docker-ID,而不是使用 GitHub-Secret。
name: CI for cont
on: workflow_dispatch
jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: ./Code/
file: ./Code/Dockerfile-cont
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/cont:latest
-
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}