【发布时间】:2021-06-07 07:21:06
【问题描述】:
问题
我的容器有一个多阶段(两个阶段)docker build,我们将其命名为cont,我希望通过 GitHub Actions 实现自动化。构建过程的第一阶段/docker-image 很少更改并且构建需要很长时间;让我们称之为cont-build。我想通过在每次构建整个项目时不构建 cont-build 来缩短构建时间。
在本地运行该构建时,我可以通过本地 docker 实例轻松获得图像 cont-build。我很难将这种简单的可用性转移到 GitHub Actions。
我检查了 Docker 和 GitHub 文档,但无法找到实现此功能的方法。在本地机器上是如此简单,所以我认为在 GitHub-Actions 上它不会那么难......
方法
要保留cont-build 图像,似乎有不同的方法
- 使用某种 GitHub 缓存。我不确定图像缓存的持续时间。
- 从 DockerHub 拉取镜像,在构建时间较长的情况下可能比构建快得多
对我来说,第二个似乎更直接且不那么复杂。所以我的方法是每次我想构建cont 时,将cont-build 发布到DockerHub 并在GitHub Action 中拉取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 }}
【问题讨论】:
标签: docker github github-actions dockerhub docker-multi-stage-build