在docker容器中的jenkins使用宿主机的docker脚本命令
- Published on
本文最近一次更新于 1729 个天前,其中的内容很可能已经有所发展或是发生改变。
前言
起因是我的群晖机子上用docker安装了jenkins想要做自动化部署,但是我要部署的软件也是使用docker的,也就是要构建的软件位于jenkins所在的容器中,构建好无法直接发布到群晖的docker中。 在容器中的jenkins想要调用宿主机的docker,docker outside of docker这种方案是用的最多的,具体就是将宿主机的docker挂载到容器中,容器调用内部docker其实就是在调用宿主机的docker。
由于直接使用官方的jenkins库构建的容器并不符合,所以我查阅资料写了下Dockerfile。如下
Dockerfile
FROM jenkins/jenkins:lts
LABEL LY waterservers@163.com
USER root
# 换成网易源的debian 官方源太慢
RUN echo "deb http://mirrors.163.com/debian/ stretch main non-free contrib" > /etc/apt/sources.list && \
echo "deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list && \
echo "deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.163.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list && \
echo "deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib" >> /etc/apt/sources.list && \
echo "deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib" >> /etc/apt/sources.list
RUN apt-get update \
&& apt-get install -y sudo \
&& rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
USER jenkins
将jenkins账号加入到sudo账号中,这样在jenkins账号就有权限去使用docker的命令了。不过这时候使用的docker方法都要加上sudo。
构建容器有两种
我使用的是docker-compose构建的
第一种 使用docker-compose
version: '3'
services:
jenkins:
build: .
ports:
- "32774:8080"
- "50000:50000"
networks:
- default
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/bin/docker
- /volume2/docker/jenkins_home:/var/jenkins_home
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
最重点的是 1、2两行。第一行是获取docker运行时,第二个是获取当前宿主机的docker方法。我的docker是安装在群晖的docker所以位于/usr/local/bin/docker中。其他系统可以使用which docker获取docker安装位置。
第二种 常规的使用命令行安装
docker run -p 8081:8080 --name jenkins --restart=always -it -d -u root -v /volume2/docker/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker:/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose jenkins