docker工人build立官方jenkins容器内

我在docker上运行官方Jenkins容器。 我需要build立docker形象作为成功构build后的行动,但jenkins容器没有docker二进制。

我看到几个选项,首先是从官方图像派生我自己的jenkins容器与docker二进制可用。 第二个select是使用专门的Jenkins从站与docker和其他必要的运行时间可用。 第三个select是提供Jenkins服务器。 我想在容器上运行一切,因为它干净,简单,易于重复。

你怎么解决这个问题? 从长远来看哪个更好的解决scheme?为什么? 我的最高优先级是能够通过单一的指令来configuration和引导整个CI基础设施。 而且,构build的docker容器将被推送到registry等,所以组件之间的连接应该是最佳的,最小的复杂度或手动configuration。

在容器中安装docker不是一个好主意。

相关文章

但是,您可以通过安装dockersockets来连接运行在主机上的docker守护进程。 它应该是好的testing目的,但不要在生产模式下运行,因为它会造成安全问题。

相关文章

您当然可以find一个更清洁的解决scheme,直接从您的主机pipe理您的部署/构build过程,观看Jenkins容器的退出状态。

我们现在有一个与GoCD类似的设置,GoCD代理运行在docker容器中,并且必须在成功的pipe道上构build图像。

tl; dr仍然是一个怪异的方式,但这是最好的行为select: 使用从容器到运行Jenkins 的docker主机的TCP连接 。 注意@Raphayol提到的安全含义。

这是我们试过的:

1)在Docker中运行docker

不是一个好主意。 导致IO子系统吠叫并重新启动的各种悬挂情况是必要的。

2)build立在群体上

Swarm集群或任何其他docker集群意味着运行容器不build立它们。 旧的容器被推回最新,因为构build和推送不能保证在同一个节点上执行。

3)专用的构build主机

虽然这样做的工作比工作节点的目的和自动缩放变得棘手。

4)安装dockersockets

工作分类,但在负载很重的情况下,它会产生随机的IO锁,并且需要重新启动docker守护进程

5)通过TCP连接

这个选项现在可以运行好几个月了,尽pipe如果你的jenkins构build的服务器是完全隔离的,那么这个解决scheme并不是一个明确的解决scheme。

[root@ip-10-10-10-10 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e3630d84909e registry.backbase.com/gocd-agent "/sbin/my_init" 2 minutes ago Up 2 minutes 0.0.0.0:9040-9045->9040-9045/tcp docker_agent_1 [root@ip-10-10-10-10 ~]# docker exec -it e3 env|grep DOCKER DOCKER_TLS_VERIFY=yes DOCKER_HOST=tcp://10.10.10.10:2376 DOCKER_CERT_PATH=/var/go/docker-certs