在Docker容器中运行的Jenkins构建Docker镜像

问题描述:

我正在阅读this article关于在Jenkins能够自行构建Docker镜像的情况下设置运行在Docker容器中的Jenkins。尽管此解决方案有效,但作者也指出了一些安全问题。在Docker容器中运行的Jenkins构建Docker镜像

主要的安全问题在于Jenkins需要运行Docker命令,这需要在Jenkins容器中加载一个Docker套接字(加上Jenkins需要sudo才能运行Docker命令)。因此,任何访问Jenkins Web界面的人都可以运行任何可以完全访问主机系统的命令(通过运行Docker容器)。

因此,我想知道如果我有人有一些想法,使此设置更安全。由于Jenkins仍然需要能够执行Docker命令(使用sudo)来构建新映像,让Jenkins用户仍然能够启动,所以在Docker容器内部(但直接在主机系统上)运行Jenkins似乎并不安全。任何任意的容器。使用防火墙可以限制Jenkins可以访问的IP地址,但我希望可能有其他一些解决方案来降低安全风险。

编辑 我忘了提Jenkins也应该能够在同一台机器上启动(新创建的)容器。

Docker远程API公开了各种端点来处理创建,列表,检查等图像,请参阅https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/images

作为构建步骤调用端点https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/create-an-image可能有助于从Dockerfile构建图像。

+0

我不知道,如果这种做法将使詹金斯创建容器,随后与各种参数,如卷安装等运行同一台主机上的图像 – Koningh

我想你是这样的。

您可以在运行图像时安装Docker袜子。 -v /var/run/docker.sock:/var/run/docker.sock -v $(docker):/ usr/bin/docker 您可以访问jenkins容器内的docker。

请按照下面的链接 http://container-solutions.com/running-docker-in-jenkins-in-docker/