有哪些CI服务可以构建Docker容器并使用Docker构建缓存?

21

我有一堆Docker容器,全部使用docker-compose(以前是fig)连接在一起。我发现那些自称为“Docker CI”服务的服务通常只是在谈论使用Docker来运行其构建工作程序。

我想要一个持续集成服务,可以保留Docker构建缓存,而不是每次都启动全新的工作程序/文件系统/构建上下文。否则,构建将需要花费很长时间。最好由管理(不像https://github.com/groupon/DotCi,它没有像CircleCI那样随时可用的每个构建数据库)。

我找到的唯一的东西是TeamCity(老旧,您不能轻松地像CircleCI一样通过yaml文件版本化构建任务,必须维护基础设施等)。Quay.io没有像CircleCI和Travis那样提供数据库,因此您必须将开发和生产分叉,并在容器内安装一个数据库并在容器构建过程中运行单元测试(呕吐 - 您无法进入未构建的容器以调试问题!)。

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


请注意,现在也可以在Travis上构建Docker镜像,https://blog.travis-ci.com/2015-08-19-using-docker-on-travis-ci/。 - cboettig
5个回答

15

CircleCI 1.0

CircleCI可以让您在构建过程中构建Docker容器:https://circleci.com/integrations/docker

然而,您是正确的,这并没有缓存Docker镜像 - 在我们的堆栈上做到这一点有点棘手,但我们计划很快解决这个问题。

与此同时,许多客户都使用CircleCI内置(非Docker)缓存来缓存它,通过使用docker save/docker loadhttps://circleci.com/docs/docker#caching-docker-layers。虽然不是最理想的方法,但它应该能够解决您的问题,直到我们能够更好地支持它为止。

更新CircleCI 2.0

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


8
我希望docker load能够达到这个效果,但它无法保留构建缓存。docker load所需的时间与从私有仓库拉取完全构建的镜像相同,因此它无法解决问题。 - user3906849
2
Paul,你有关于“计划尽快解决这个问题”的更新吗?这很有趣。 - user2707671
根据我的测试,我了解到即使使用链接的docker save/load策略也不起作用(每次构建都会完全运行docker build命令),就像这里的评论所说:https://discuss.circleci.com/t/docker-1-10-0-is-available-beta/2100/15 @paul-biggar或其他人-有一个可行的示例吗? - thisjustin

3

1
只是一个快速修复,看起来博客文章的URL只能在没有尾随斜杠的情况下工作,否则会返回404错误:http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration - fagiani

2

0

有一个相关问题"如何让gitlab-ci-runner DinD镜像缓存中间镜像?"

即使我们的解决方案需要最少量的基础架构维护(我们需要运行自己的runner),我认为它值得一看。

基本上,我们不在Docker中运行Docker,而是为Runner创建一个单独的VM。这对于安全和清理任务有一些影响,请参见我们的Runner的README

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


-2

你看过wercker吗?它支持“带上自己的容器”,可以缓存你的镜像(我认为是基于每个工作节点,但通常使用自定义镜像后,启动时间会减少到几秒钟),并且据我所知还允许构建Docker镜像。

缺点是:它需要太多的GitHub权限


它甚至不允许您使用自己的 Dockerfile,因此它不是一个好的解决方案。 - Steffen Brem
@SteffenBrem:你可以在Docker Hub上从Dockerfiles构建你的镜像,并在Wercker中使用它们。对我来说很有效。 - krlmlr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接