持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
如果你通过"jenkins"关键字搜索进入Jenkins官方首页,可能会自动跳转进入www.jenkins.io/zh/,当你点击【文档】后就会看到中文版官方文档,该文档是由jenkins中文社区提供的。当你切换语言为【English】时,才会看到官方提供的英文版官方文档。
本章主要是关于文档中采用Dokcer安装Jenkins部分的说明:中文文档、英文文档
中文文档
下面是中文文档中给出的如何在Docker中安装Jenkins的步骤。
jenkinsci/blueocean
中文文档中推荐安装的镜像是【jenkinsci/blueocean】,通过在Docker Hub中搜索到,大家有没有疑惑,这个官方镜像为什么没有打【OFFICIAL IMAGE】标签,然后在Docker Hub上通过关键字"jenkins"搜索,可以看到带【OFFICIAL IMAGE】标签的【jenkins/jenkins】镜像。
根据文档的介绍,【jenkinsci/blueocean】镜像中是包含了jenkins和blueocean插件。
安装步骤
中文文档中给出的docker版本的jenkins的启动命令如下:
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
具体的参数解释可参考文档,这里主要要注意的是-v /var/run/docker.sock:/var/run/docker.sock这行命令的用途,官方解释如下,主要就是用来在docker安装的jenkins中操作docker容器,在介绍了英文文档后,对其作用进行统一的解释。
- /var/run/docker.sock表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许
jenkinsci/blueocean容器与Docker守护进程通信, 如果jenkinsci/blueocean容器需要实例化其他Docker容器,则该守护进程是必需的。
英文文档
下面是英文文档中给出的如何在Docker中安装Jenkins的步骤,步骤比较长,截取了部分进行说明,相关docker命令参数作用可参考访问文档。下面对其步骤进行一一解释。
jenkins/jenkins
英文文档中推荐安装的镜像是【jenkins/jenkins】,即上面提到的在Docker Hub上搜索的带【OFFICIAL IMAGE】标签的官方镜像。然后文档给出了如下说明:
大致意思就是:官方提供的jenkins/jenkins镜像没有包含docker CLI和Blue Ocean插件。如果想要使用Jenkins和Docker的全部的功能的话,需要按照文档下面给出的安装步骤来安装。
先跳过前面的步骤,直接来看第4步。
这里给出了如何对官方给出的【jenkins/jenkins】镜像进行定制化,即制作自己的docker镜像。
先看步骤a中的Dockerfile,主要是基于jenkins/jenkins镜像,安装了docker-ce-cli,然后给jenkins装上了blueocean和docker-workflow插件。
然后步骤b,通过docker build命令制作名为【myjenkins-blueocean】的镜像。
看到这个镜像名,是不是有一种“恍然大悟”的感觉,在Docker Hub上可以查看【jenkinsci/blueocean】镜像的制作指令,感兴趣的可以去看下,其实【myjenkins-blueocean】就是官方提供的一种制作自己的【jenkinsci/blueocean】镜像的方式。
安装步骤
上面介绍了文档中镜像不同的部分,接下来就是安装步骤。可以看到,中文文档中一步搞定的事情,在英文文档中分为了多个步骤。
-
第2步中,使用
docker create network的方式,创建了一个网络,命名为jenkins。(Docker网络相关内容可以查看博客【Docker 网络基础】) -
第3步,为了在docker安装的Jenkins中执行docker命令,需要安装docker:dind容器,到这里会发现与之前中文文档中的
-v /var/run/docker.sock:/var/run/docker.sock这个命令行的用途类似。是的,其实这两个的作用是一致的,都是为了在docker安装的Jenkins中执行docker命令,只是两份文档提供了两种方案:
-
/var/run/docker.sock
前面说过,这个是Docker守护程序用来监听的docker命令的程序,然后在启动时,被挂载到了Jenkins容器中,即jenkins容器中执行的docker命令实际上是发送给了宿主机的docker守护进程来执行的。
-
docker:dind
"dind"是"Docker in Docker"的简写,即允许在Dokcer之上的Docker容器,他跟Jenkins容器时通过第2步中创建的
jenkins网络来通讯的,即jenkins容器中执行的docker命令实际上是发送给了docker:dind容器内的docker守护进行去执行的。
-
-
第4步,制作自己的【myjenkins-blueocean】镜像,这里我推荐直接使用中文文档中推荐的【jenkinsci/blueocean】镜像。
-
第5步,启动镜像
总结
建议大家还是多阅读英文文档,毕竟"翻译"还是比较滞后的,英文文档才是第一手资源。但是非常感谢Jenkins官方提供的中文文档,就像在看大佬写的文章一样,拓宽了眼界,了解了到技术上更多的可能性。
这次中英文文档的对比,真的让我觉得收获颇多,当我看到【myjenkins-blueocean】和docker:dind的时候,真的有种看到了彩蛋的感觉,很多以前看中文文档时的疑惑就自然而然的解开了。