Jenkins + docker ,容器中跑docker服务
1. 宿主机:安装docker
2. 启动jenkins服务
Jenkins官网找自己需要的镜像版本号进行使用。
docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -m 1500M -v /data/jenkins_home/:/var/jenkins_home -v /usr/bin/dos2unix:/usr/bin/dos2unix -v /var/run/.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /etc/timezone:/etc/timezone jenkins
3. Jenkins启动配置说明
-v /data/jenkins_home/:/var/jenkins_home 挂载Jenkins主目录 -v /usr/bin/dos2unix:/usr/bin/dos2unix 将宿主机的dos2unix命令挂载给Jenkins容器服务,Jenkins调用的脚本需要该命令 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 将宿主机的docker命令挂载给Jenkins容器服务,Jenkins调用的脚本需要该命令 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /etc/timezone:/etc/timezone 容器跟上宿主机的时间,Jenkins的web页面时间也需要跟上宿主机的时间
没有/etc/timezone文件就自己创建:
echo 'Asia/Shanghai' > /etc/timezone
报错:报错原因是 文件夹的归属用户id不是1000!!!
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dde66ab01329 jenkins "/bin/tini -- /usr/l…" 4 seconds ago Exited (1) 3 seconds ago jenkins$ sudo docker logs -f --tail=100 dde66ab01329 touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
为什么文件夹的归属用户Id必须是1000?
对于初次接触jenkins的我来说,确实挺郁闷的。为什么UID必须是1000?带着疑问我去查看了Docker中央仓库提供的Dockerfile,在这里面看到了如下的代码:
$ sudo useradd -u 1000 jenkins
$ sudo passwd jenkins
$ su - jenkins
$ mkdir jenkins_home
$ docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -m 1500M -v /home/jenkins/jenkins_home/:/var/jenkins_home -v /var/run/.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -v /etc/timezondockere:/etc/timezone jenkins