【问题标题】:Does any CI service let you build Docker containers and use the docker build cache?是否有任何 CI 服务允许您构建 Docker 容器并使用 docker build 缓存?
【发布时间】:2015-01-28 20:19:37
【问题描述】:

我有一堆使用 docker-compose 连接的 Docker 容器(之前的图)。我发现标榜自己为“Docker CI”服务的服务通常只是在谈论使用 Docker 来运行它们的构建工作者。

我想要一个持续集成服务,它在运行之间保留 Docker 构建缓存,而不是启动一个全新的工作程序/文件系统/构建上下文。否则,构建绝对需要永远。理想管理(与 https://github.com/groupon/DotCi 不同,它不附带 CircleCI 的随时可用的每次构建数据库)。

我发现的唯一东西是 TeamCity(旧的,您不能像使用 CircleCI 那样轻松地在 yaml 文件中对构建任务进行版本化,您必须维护基础架构等)。 Quay.io 没有像 CircleCI 和 Travis 那样提供数据库,因此您必须将 dev 和 prod 分开并在容器内安装一个并在容器构建期间运行单元测试(ew - 您不能生成到未构建的容器中调试东西!)。

如何在 Docker 容器集群上运行持续集成?

【问题讨论】:

标签: continuous-integration docker circleci


【解决方案1】:

CircleCI 1.0

CircleCI 允许您在构建过程中构建 Docker 容器:https://circleci.com/integrations/docker

不过,您说得对,这不会缓存 Docker 映像 - 在我们的堆栈上要做到这一点有点棘手,但我们计划很快解决这个问题。

与此同时,许多客户已使用 CircleCI 的内置(非 Docker)缓存,通过使用 docker save/docker load:https://circleci.com/docs/docker#caching-docker-layers 对其进行缓存。这并不理想,但它应该能让您度过难关,直到我们能够更好地支持它。

为 CircleCI 2.0 更新

CircleCI 2.0 以 Docker 为中心。您可以构建 Docker 镜像、利用层缓存、使用 Docker Compose,甚至使用官方和自定义 Docker 镜像作为构建环境。

【讨论】:

  • 我希望docker load 这样做,但它不会保留构建缓存。 docker load 所花费的时间与从私有存储库中提取完整构建映像所需的时间一样多,因此它无法解决问题。
  • Paul 您能否提供有关“计划尽快解决该问题”部分的最新信息?这会很有趣。
  • 根据我的测试,我的理解是即使链接的 docker save/load 策略也不起作用(docker build 命令在每次构建时完全运行),根据这里的评论:discuss.circleci.com/t/docker-1-10-0-is-available-beta/2100/15 @paul-biggar,或者任何人——有一个可行的例子吗?
【解决方案2】:

我目前正在使用 CircleCI,请参阅 http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration 以获得使用 docker 缓存的良好指南

shippable 也值得一试,因为他们的整个基础架构都基于 docker,并使用 shippable formations 编排多个 docker 容器。

【讨论】:

  • 只是一个快速修复,看起来博客文章的 URL 仅在没有尾部斜杠的情况下有效,因为它将返回 404:tschottdorf.github.io/…
【解决方案3】:

Codeship 现在支持存储 Docker 映像缓存并检索它以加快构建速度。

https://codeship.com/documentation/docker/caching/

【讨论】:

    【解决方案4】:

    有一个相关问题"How can I let the gitlab-ci-runner DinD image cache intermediate images?"

    即使our solution 需要最少的基础设施维护(我们需要运行自己的运行器),我认为还是值得一看的。

    基本上我们不在 Docker 中运行 Docker,但我们只为运行者创建了一个单独的 VM。这对安全和清理任务有一些影响,另请参阅我们跑步者的README

    随着 Docker 对各种 CI 系统的支持得到改进,也许这个解决方案将来会过时,但现在它是性能、维护和可用性之间的良好组合。

    【讨论】:

      【解决方案5】:

      你见过wercker吗?它支持“自带容器”,将缓存您的图像(我认为基于每个工作人员,但在几次构建后,通常使用自定义图像启动会缩短到几秒钟),并且 afaik 还允许构建 Docker 图像。

      缺点:它需要far too many GitHub permissions

      【讨论】:

      • 它甚至不允许你使用自己的Dockerfile,所以这不是一个好的解决方案。
      • @SteffenBrem:您可以在 docker hub 上从您的 Dockerfile 构建您的图像,并在 wercker 中使用它们。为我工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多