走进docker系列:开篇

本人docker初学者,边学习边总结,一方面加深本身的理解,另外一方面但愿对其余想深刻了解docker的同窗有所帮助。git

因为本人缺少实战经验,错误在所不免,欢迎批评指正,谢谢。程序员

包含的内容

本系列主要介绍三个github上的项目: mobycontainerdrunc.github

因为只介绍docker核心的东西,因此不会包含下面这些项目:chrome

  • compose:使用Python语言开发,将多个相关的容器配置在一块儿,从而能够同时建立、启动、中止和监控它们。
  • machine:帮助安装docker到指定位置,包括本地虚拟机、远端云主机等,同时还管理这些主机的信息,能够很方便的操做安装在不一样主机上的这些docker。
  • kitematic:桌面版的docker客户端(图形界面),使用JavaScript基于electron开发。
  • toolbox:帮助安装docker环境到Windows和Mac平台,包括Docker引擎、Compose、 Machine和 Kitematic,固然docker引擎是安装在虚拟机里面的,本地只有客户端,使用哪一个虚拟机依赖于平台,toolbox会帮你搞定这一切。
  • distributionRegistry 2.0的实现,主要是管理和分发docker镜像,Docker Hub背后的技术。
  • swarmkit:嵌入在docker里面的容器编排系统,能够简单的把它和docker的关系理解成IE浏览器和Windows的关系,捆绑销售。

面向读者

本系列主要专一docker背后的技术和实现思路不介绍怎么使用docker,不介绍代码细节docker

  • 若是你是docker初学者,想了解怎么使用docker,那么本系列不适合你。
  • 若是你已经熟悉了基本的操做,想了解下高级点的参数,或者想了解背后到底发生了什么,便于本身更好的使用docker,更好的解决碰到的问题,那么本系列适合你。
  • 若是你是一名开发人员,想了解docker的代码实现细节,但又不知道从何处下手,本系列也许会给你一些启发。

docker版本

自从docker决定将swarm整合进来弄企业版以后,代码一直在调整,docker的一些目录和程序名称也在发生变化,因此本系列的内容无法覆盖全部docker版本,只能挑其中的一个。segmentfault

自v17.03开始,docker采用了新的发行方式,版本的发行周期变成了一个月一次,而且也分了企业版和社区版,在本系列中,将以v17.03社区版做为参考,建议你们阅读本系列时,手头的docker版本不低于v17.03。api

docker完整的变动列表请参考这里浏览器

docker和moby的关系

2017-04-18,在DockerCon 2017上,docker公司正式宣布成立moby项目,同时将github上的docker/docker项目重命名成了moby/moby,虽然会自动重定向,但代码里的相关引用不排除会有问题,须要留意。bash

这里不评价此次变化,对普通使用者来讲,不会发生任何变化,仍是熟悉的命令,熟悉的参数,对开发人员来讲,代码的位置变了,但代码仍是那份代码。网络

之后moby会变成什么样,如今还不清楚,有可能和docker的关系会变成blink和chrome的关系同样,静观其变,但愿不要影响咱们学习。

注意:若没有特别说明,本系列提到的docker源码,都指的是moby的代码

文章列表

该系列的全部文章都会列在这里,便于你们选择阅读。因为本人时间安排发生变化,本系列中止更新,后面不肯定是否会继续,很是抱歉。

建议阅读

在阅读本系列以前,若是对Linux不是很熟的话,建议先阅读本人的Linux程序员专栏,里面包含了内存、CPU、文件系统、网络、namespace、cgroup等方面的详细内容,和docker相关的Linux知识还在更新中,敬请关注。

获取docker相关的代码

因为如今docker依赖的containerd和runc是github上两个单独的项目,若是你须要分析docker的代码,请确保containerd和runc的版本和docker的版本是一致的,检查办法以下:

#假设咱们已经将docker的源代码clone到了/home/dev/repos/docker目录下
dev@debian:~/repos/docker$ git branch
* master

#列出17.03相关的tag
dev@debian:~/repos/docker$ git tag|grep 17.03
v17.03.0-ce
v17.03.0-ce-rc1
v17.03.1-ce
v17.03.1-ce-rc1

#取最新的v17.03.1-ce
dev@debian:~/repos/docker$ git checkout -b v17.03.1-ce v17.03.1-ce
Switched to a new branch 'v17.03.1-ce'
dev@debian:~/repos/docker$ git branch
  master
* v17.03.1-ce

#查看docker所用的runc和containerd的commit id
dev@debian:~/repos/docker$ egrep "RUNC_COMMIT|CONTAINERD_COMMIT" ./hack/dockerfile/binaries-commits
# When updating RUNC_COMMIT, also update runc in vendor.conf accordingly
RUNC_COMMIT=54296cf40ad8143b62dbcaa1d90e520a2136ddfe
CONTAINERD_COMMIT=4ab9917febca54791c5f071a9d1f404867857fcc

#查看runc和containerd的库路径
dev@debian:~/repos/docker$ egrep "runc.git|containerd.git" ./hack/dockerfile/install-binaries.sh
        git clone https://github.com/docker/runc.git "$GOPATH/src/github.com/opencontainers/runc"
        git clone https://github.com/docker/containerd.git "$GOPATH/src/github.com/docker/containerd"

根据上面的结果,先将runc和containerd克隆下来,而后checkout相应的commit id,这样就能够配合docker的代码一块儿看了。这里是上面例子中找到的containerd和runc的信息:

注意:

  • 多是为了方便对runc进行修改,docker将github.com/opencontainers/runc克隆到了github.com/docker/runc,在docker v17.03里面,runc是从github.com/docker/runc.git拉的代码,而后放在本地的opencontainers/runc目录下,伪装是opencontainers的runc,这个须要留意,别pull了错误的库。
  • 上面显示containerd的地址是https://github.com/docker/con...,这个没有关系,github已经将这个地址重定向到了https://github.com/containerd...
相关文章
相关标签/搜索