2016-05-17 125 views
2

我在一个Docker容器中运行一个Jenkins实例,它连接到一个BitBucket存储库。当在线资源库发生变化时,Jenkins会下载新的源代码。基于新来源,我想创建一个新的Docker镜像,但是这需要在主机上进行,因为它是我安装Docker的地方。如何在Docker容器中运行Jenkins时在主机上构建?

我还没弄清楚如何在主机上运行某些东西,但同时我明白Docker用于隔离进程,所以这是设计。有没有办法做到这一点?

回答

1

我将创建一个单独的Jenkins slave,映射到运行Jenkins的主机或安装了Docker的单独主机。然后运行你的工作,在从服务器而不是主服务器上创建Docker镜像。

official Jenkins Docker image的文档有关于如何连接从站的详细信息。

+0

谢谢你的答复河我想在Docker中使用Jenkins,这样我就不需要将它安装在主机上。在主机上安装一个Jenkins slave会失败目的。 – Demetris

0

可以使用Jenkins容器内的主机使用Docker。您需要在容器上安装Docker,然后映射主机的docker套接字描述符。

样品Dockerfile将实现这一点看起来是这样的:

FROM jenkins/jenkins:2.102 

USER root 

RUN apt-get update && \ 
    apt-get install -y \ 
    apt-transport-https \ 
    software-properties-common 

# Docker 
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ 
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" && \ 
    apt-get update && apt-get install -y docker-ce && \ 
    usermod -aG docker,staff jenkins 

# Set SUID to run docker as root 
RUN chmod g+s /usr/bin/docker 

USER jenkins 

要根据与码头工人在该图像上运行容器工作,你需要映射docker.sock文件描述符:

docker run -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock my-image

如果你不想建立新的图像,你可以使用我的预建图像:https://hub.docker.com/r/mdobak/docker-jenkins/