Jenkins(Docker容器内)使用宿主机的docker命令
2017-03-02 18:33
951 查看
1、Jenkins镜像
Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/etc/default/docker的DOCKER_OPTS配置,总是出现拒绝访问的问题,其实就是容器的jenkins用户没有权限访问容器外的docker命令),按照大神的思路,把容器内的jenkins用户加入到docker组中,即可成功访问docker命令了。1.1 制作自定义jenkins镜像
镜像Dockerfile:FROM jenkins USER root ARG dockerGid=999 RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group USER jenkins构建和启动镜像:
$ docker build . -t my-jenkins $ docker run --name jenkins -p 7080:8080 -p 50000:50000 -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -v /var/docker_data/jenkins/jenkins_home:/var/jenkins_home -v /var/docker_data/jenkins/settings:/var/settings -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -d my-jenkins
注意这两个volume参数(将jenkins容器内的docker命令指向了宿主机): -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker 之后直接在jenkins的project里面就可以使用docker命令了,比如使用maven的docker插件打包镜像。
1.2 可能出现的问题 - 找不到某些library
之后再另外一台机器部署jenkins的时候发现的这个问题,就是再jenkins容器内调用docker命令时报错(上一次可以是因为我装jenkins上装了一些插件,这些插件已经安装了这些包):docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory Build step 'Execute shell' marked build as failure原因是jenkins容器内部没有这个包,解决的办法有两个:1、将容器宿主机的包映射到容器内:
#省略了其他docker运行参数,只列出了缺少的包映射volume $ docker run --name jenkins -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -d my-jenkins2、对jenkins镜像进行封装,官方的jenkins镜像是基于debian jessie的,dockerfile最好把源切换成国内的。Dockerfile内容如下:
FROM jenkins USER root #清除了基础镜像设置的源,切换成阿里云的jessie源 RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \ && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list #更新源并安装缺少的包 RUN apt-get update && apt-get install -y libltdl7 ARG dockerGid=999 RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group \ USER jenkins
相关文章推荐
- jenkins ssh插件远程到ubuntu服务器上使用docker命令
- 使用docker构建jenkins镜像并运行容器
- 使用Docker网络相关的命令管理容器
- [整理]docker学习之使用jenkins容器部署git上的web到nginx容器中
- Docker-MySql -- 使用mysqldump 命令备份导出mysql容器中的结构数据
- docker 运行的新容器不能使用常规的命令
- 容器docker的命令使用
- 持续集成:docker下使用jenkins容器构建docker镜像
- 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)
- 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)
- Docker 中 openjdk 容器里无法使用 JDK 的 jmap 等命令的问题
- Jenkins使用docker 容器 作为Jenkins slave
- 使用Jenkins来构建Docker容器
- 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)
- windows10中使用docker命令启动Ubuntu容器
- 使用docker构建jenkins镜像并运行容器
- 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)
- 使用Jenkins来构建Docker容器
- 使用docker构建jenkins镜像并运行容器
- Docker容器使用jenkins部署web项目(总结)