陈同学
微服务
Accelerator
About
# 15min运维之Docker运行Jenkins从开始到放弃 某新环境需要Jenkins,准备用docker "**一条run命令搞定**"。其他工具用docker屡试不爽,这次Jenkins是从开始到放弃。 Jenkins作为CI工具,构建过程需依赖对应的构建环境,如:maven、java、npm、docker等。如今是docker盛行的年代,什么都可以打成镜像,docker倒是成了标配。 ## 简单环境示例 > [Jenkins dockerhub 官方镜像](https://hub.docker.com/_/jenkins/) 假设只需要准备maven和java环境,只要把宿主机的maven和jdk挂载到容器即可,再给容器中配置下PATH变量 ```shell docker run -d --restart=always --name jenkins \ -p 8085:8080 \ -p 50000:50000 \ -v /usr/local/custom:/lib/custom \ -v /jenkins/data:/var/jenkins_home \ --env-file=/jenkins/env \ jenkins ``` 上述命令中,*/usr/local/custom* 存放了 `apache-maven-3.3.9 `和 `jdk1.8.0_121 `,*/jenkins/data* 用于存储jenkins的数据。 */jenkins/env* 存储了环境变量,如下: ```shell JAVA_HOME=/lib/custom/jdk1.8.0_121 M2_HOME=/lib/custom/apache-maven-3.3.9 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/lib/custom/jdk1.8.0_121/bin:/lib/custom/apache-maven-3.3.9/bin ``` 这样一个简单的CI环境就OK了。 ## Docker环境示例 > [Using Docker-in-Docker for your CI or testing environment? Think twice](http://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/) > [The simple way to run Docker-in-Docker for CI](https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci) > [在(Docker里的)Jenkins里运行Docker](http://www.dockone.io/article/431) 当Jenkins本身就是容器时,在容器里面构建镜像就有一丢丢麻烦了,有2个方案: * **DinD(Docker-in-Docker)**:基于Jenkins官方镜像直接安装docker做一个新镜像,形成一个完整的隔离环境。 * **DooD(Docker-outside-of-Docker)**:将宿主机的docker sock映射到Jenkins容器,直接用宿主机的docker,相当于把一切又委托给了宿主机。 我选了DooD,踩了几个坑,尽非功夫,直接放弃了。有兴趣的伙伴可以参考上面的三篇文章,描述的非常清楚。 ## 小结 无论是DinD,还是DooD,目的都是为了CI。DooD其实没啥意义,DinD又有点作,直接在宿主机安装不就得了。 Jenkins作为CI工具,可以非常稳定的运行在宿主机上,也不存在迁移的问题(当然,如果主机配置低,后续JOB又多,还是得迁移或主机升配),直接部署在主机上是最优选择。 因此,是否以Docker来运行某个产品,得根据具体情况来确定。 本篇纯属技术小伙的好奇心驱使。
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
15min运维之Docker运行Jenkins从开始到放弃
文章链接:
https://chenyongjun.vip/articles/57
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力