gpt4 book ai didi

docker - 如何使用 GitHub Actions 实现多阶段 Docker 构建?

转载 作者:行者123 更新时间:2023-12-04 17:20:23 27 4
gpt4 key购买 nike

问题
我的容器有一个多级(两级)docker 构建,让我们将其命名为 cont ,我希望通过 GitHub Actions 实现自动化。构建过程的第一阶段/docker-image 很少更改并且构建需要很长时间;让我们称之为 cont-build .我想通过不构建来减少构建持续时间 cont-build每次我构建整个项目时。
在本地运行该构建时,我有图像 cont-build通过我的本地 docker 实例很容易获得。我很难将这种简单的可用性转移到 GitHub Actions。
我检查了 Docker 和 GitHub 文档,但无法找到实现这一点的方法。在本地机器上它是如此简单,所以我认为在 GitHub-Actions 上它不会那么难......
方法
坚持 cont-build图像,似乎有不同的方法

  • 使用某种 GitHub 缓存。我不确定缓存图像的持续时间。
  • 从 DockerHub 拉取镜像,在构建时间长的情况下可能比构建快得多

  • 第二个对我来说似乎更直接,更简单。所以我的方法是发布 cont-build到 DockerHub 并拉取 cont-build每次我想构建时都在 GitHub Action 中 cont .
    我尝试使用 uses: Docker://${{ secrets.DOCKERHUB_USERNAME }}/cont-build ,但不知道放在哪里。
    问题
    我在哪里/如何拉图像 cont-build这是 Dockerfile-cont 所要求的在下面的工作流程中“构建和推送”?另外,如果我的方法不好,那么构建的一个阶段不会/很少改变的多阶段构建的一般方法如何,特别是考虑到 GitHub 缓存可能会在一段时间后被删除这一事实?
    我意识到我可以使用类似 FROM mydockerID/cont-build:latest 的东西在 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 }}

    最佳答案

    多阶段构建的问题在于,如果您希望缓存工作,您需要:

  • 进入中间阶段以及重建的一部分。
  • 使用 --cache-from引用前面的图像,包括中间步骤。

  • 如果您考虑重建的工作方式,如果您缺少中间阶段,构建器将“嗯,我想我的缓存中没有它”并重建;在完成之前的所有步骤之前,它无法判断最终阶段是否需要重建。
    所以你需要做下面的歌舞,假设两个阶段,“build”和runtime:
  • 拉“你的形象:最新”和“你的形象:构建”。
  • 构建并标记每个中间阶段,例如"yourimage:build", "yourimage:latest", 与 --cache-from=yourimage:build --cache-from=yourimage:latest .
  • 推送这两个图像。

  • 您可以在 https://pythonspeed.com/articles/faster-multi-stage-builds/ 查看具体细节和更多扩展说明以及示例解决方案。

    关于docker - 如何使用 GitHub Actions 实现多阶段 Docker 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66546286/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com