job*_*2ca 6 github docker dockerhub docker-multi-stage-build github-actions
我的容器有一个多阶段(两个阶段)docker 构建,让我们命名它cont,我希望通过 GitHub Actions 实现自动化。构建过程的第一阶段/docker-image很少改变,并且构建需要很长时间;让我们称之为cont-build。我想通过不在cont-build每次构建整个项目时都进行构建来减少构建持续时间。
cont-build在本地运行该构建时,我可以通过本地 docker 实例轻松获取该映像。我很难将这种简单的可用性转移到 GitHub Actions。
我检查了 Docker 和 GitHub 文档,但无法找到实现此目的的方法。在本地机器上是如此简单,所以我认为在 GitHub-Actions 上不会那么难......
为了保持cont-build图像,似乎有不同的方法
对我来说,第二个似乎更直接、更简单。所以我的方法是发布cont-build到 DockerHub 并cont-build在每次我想要构建cont.
我尝试使用uses: Docker://${{ secrets.DOCKERHUB_USERNAME }}/cont-build,但不知道将其放置在哪里。
在哪里/如何提取下面工作流程中“构建和推送”cont-build所需的映像?Dockerfile-cont另外,如果我的方法不好,那么多阶段构建的一般方法是怎样的,其中构建的一个阶段不会/很少改变,特别是考虑到 GitHub 缓存可能会在一段时间后被删除这一事实?
我意识到我可以使用类似FROM mydockerID/cont-build:latestin的东西Dockerfile-cont,但这似乎不是利用整个 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 }}
Run Code Online (Sandbox Code Playgroud)
多阶段构建的问题是,如果您希望缓存正常工作,您需要:
--cache-from参考前面的图像,包括中间步骤。如果您考虑重建如何工作,如果您缺少中间阶段,构建器将“嗯,我想我缓存中没有那个”并重建;在完成之前的所有步骤之前,它无法判断最后阶段是否需要重建。
因此,您需要执行以下歌曲和舞蹈,假设有两个阶段:“构建”和运行时:
--cache-from=yourimage:build --cache-from=yourimage:latest.您可以在https://pythonspeed.com/articles/faster-multi-stage-builds/查看具体细节和更扩展的解释以及示例解决方案
| 归档时间: |
|
| 查看次数: |
4175 次 |
| 最近记录: |