最近一直在研究这一块东西,做个记录吧。持续更新,有错误的地方也一点点改进。
从docker1.11开始,docker的整体框架改动很大。从之前的docker一个二进制文件变成了4个二进制文件。docker, docker-containerd, docker-containerd-shim和docker-runc。docker的模块分离的一个好处就是底层的容器的实现,可以跟上层的daemon进行分离,所以除了runc,还有一个runv 出现。抽象出来的结构,就类似于下图:
runc可以理解成是 runtime container就是容器进行时,还是一般容器的实现。而后者runv则是 runtime virtual machine的实现,也就是利用一个精简的虚拟机来实现容器的功能,对容器所使用的API进行了一个封装。生成的容器就不在简单的是一个进程而已,而是一个拥有内核和更高隔离性的虚拟机。参见HyperContainer
组件之间的通讯使用的是gRPC,是google包装的一套RPC程序。有了 gRPC, 我们可以一次性的在一个 .proto 文件中定义服务并使用任何支持它的语言去实现客户端和服务器。有关gRPC可以参照以下几篇文档。
[1] 官方文档
[2] gRPC的简单Go例子
[3] gRPC初探
自己也写了个简单的理解下载最新版本的docker,需要更新yum源。
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF $ yum install docker-engine $ docker version
参考:
[1] docker1.11的变化,github
[2] go语言笔记–自己写一下心得