使用
Docker 版本 Jenkins, Jenkins 主要用来构建 Docker 镜像和运行容器,就会存在 Docker 套 Docker 的问题。然而
Jenkins 容器内实际是没有 Docker 环境的,所以采用一种简单处理方式,将宿主机的 Docker 映射到 Jenkins 容器,这样 Jenkins 容器内就可以操作宿主机 Docker 了。Jenkins 容器内只有 java 环境,理想状态是流水线都通过 Dockerfile 和 docker-compose.yml 构建容器,不要直接跑在 Jenkins 容器里,减少对 Jenkins 容器的环境改造。# 运行容器 # --net=host指定宿主机的网络,否则内网IP会走外网网卡 # -v /opt/data/jenkins_home:/var/jenkins_home,挂载jenkins目录到宿主机,防止数据丢失 # -v /var/run/docker.sock:/var/run/docker.sock和-v $(which docker):/usr/bin/docker指定jenkins通过宿主机调用docker # -Dhudson.model.ParametersAction.keepUndefinedParameters=true,这个是配合Labels and Nodes Parameter插件使用的 # -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai,方便查看日志打印的时间 # centos docker run -d \ --restart=always \ -v /opt/data/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ -v $(which docker-compose):/usr/bin/docker-compose \ -e JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Dhudson.model.ParametersAction.keepUndefinedParameters=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai" \ --net=host \ --dns=8.8.8.8 \ -u root \ jenkins/jenkins:lts-alpine # ubuntu,注意alpine镜像不兼容,不能使用docker命令,要用Debian系镜像 docker run -d \ --restart=always \ -v /opt/data/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ -v $(which docker-compose):/usr/bin/docker-compose \ -e JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Dhudson.model.ParametersAction.keepUndefinedParameters=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai" \ --net=host \ --dns=8.8.8.8 \ -u root \ jenkins/jenkins:lts
