持续集成 在 Jenkins 官方 中英文文档 中发现的彩蛋-Docker 篇

几勺奶酪 · 2021年05月27日 · 最后由 恒温 回复于 2021年05月28日 · 2228 次阅读

如果通过"jenkins"关键字搜索进入 Jenkins 官方首页,可能会自动跳转进入https://www.jenkins.io/zh/,当你点击【文档】后就会看到中文版官方文档,该文档是由 jenkins 中文社区提供的。当你切换语言为【English】时,才会看到官方提供的英文版官方文档。

本博客主要是关于文档中采用 Dokcer 安装 Jenkins 部分的说明:中文文档英文文档

中文文档

下面是中文文档中给出的如何在 Docker 中安装 Jenkins 的步骤。

image-20210527115127411

jenkinsci/blueocean

中文文档中推荐安装的镜像是【jenkinsci/blueocean】,通过在 Docker Hub 中搜索到,大家有没有疑惑,这个官方镜像为什么没有打【OFFICIAL IMAGE】标签,然后在 Docker Hub 上通过关键字"jenkins"搜索,可以看到带【OFFICIAL IMAGE】标签的【jenkins/jenkins】镜像。

image-20210527115628489

image-20210527115835450

根据文档的介绍,【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 命令参数作用可参考访问文档。下面对其步骤进行一一解释。

image-20210527121128367

jenkins/jenkins

英文文档中推荐安装的镜像是【jenkins/jenkins】,即上面提到的在 Docker Hub 上搜索的带【OFFICIAL IMAGE】标签的官方镜像。然后文档给出了如下说明:

image-20210527122727215

大致意思就是:官方提供的 jenkins/jenkins 镜像没有包含 docker CLI 和 Blue Ocean 插件。如果想要使用 Jenkins 和 Docker 的全部的功能的话,需要按照文档下面给出的安装步骤来安装。

先跳过前面的步骤,直接来看第 4 步。

image-20210527122528622

这里给出了如何对官方给出的【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。

  • 第 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 的时候,真的有种看到了彩蛋的感觉,很多以前看中文文档时的疑惑就自然而然的解开了。

共收到 1 条回复 时间 点赞

翻译滞后是真事。包括书籍论文。但是国内的其他文档不一定落后。说不定比国外先进呢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册