Docker引擎与Kuberneters与Docker镜像

1. Docker引擎架构

关于Docker的一个简单模型由Docker client ,Docker daemon,containerD,shim,runc组成。需要明确的一点的是,这些东西从操作系统的层面上来看,都是进程。

Docker client :类似于shell,解析用户输入的命令,解析用户命令之后,将其转换成合适的API并向下传递至Docker daemon。

Docker daemon:其中daemon是守护进程的意思。最初版本的docker将所有部件都在Docker daemon中,后面随着更新,将部件慢慢从Docker daemon中剥离出来,形成小而专的模块。Docker client便是从Docker daemon中剥离出来。现在的Docker daemon接收Docker client传递下来的命令,并按照命令控制containerD去创建容器。

containerD:Docker中最重要最核心的一个部分,它负责管理容器的生命周期,像是创建容器,暂停,撤销容器等。

runc:runc是容器的实际创造者,它负责调用linux内核所提供的服务,如Cgroup。runc接收containerD的命令去创建容器。

shim:一旦runc创建了容器过后,runc就成为了容器的父进程,但runc完成了容器的创建之后,该进程就会自动退出(不明白docker为什么这样做),为了避免容器进程被init进程收养成为守护进程,因此使用shim接管容器进程,在runc退出之后,shim就会成为runc的父进程。这样一来,容器进程就是可控的。

2 Docker与Kuberneters

Kuberneters使用Docker引擎中的containerD来创建和管理容器。containerD是一个可拆卸的部件,它可以单独地被用在其他项目中。Kuberneters采用containerD作为其默认的容器运行进程,但在Kuberneters创建和管理容器的进程是可以替换的,Kuberneters提供一个接口CRI,这个接口使得Kuberneters能够使用其他的创建管理的容器的进程。换句话说,Kuberneters需要的仅仅只是一个能够提供快捷方便创建容器的工具。

3 Docker镜像与用户组

3.1 Docker镜像与PCB

可以将Docker镜像类比为PCB(process control block).pcb被用于描述一个程序的执行情况。在操作系统中进程时常被切换到就绪态,pcb中存储了像pc值,寄存器值,栈指针这些数据等等。操作系统样便可以利用这些信息,在cpu重新构建复原程序执行的情况,并继续执行。Docker镜像也类似于pcb,Docker镜像中存储了与容器相关的信息,runc可以使用这些信息,创建新的容器。
简而言之,docker镜像包含了构建容器的所有信息,docker镜像是runc这个进程的输入数据,runc使用这些数据构建容器。

3.2 Docker镜像与用户组

一个Docker镜像是多个镜像层叠加而成。例如一个ubuntu linux 16.04的景象由ubuntu 16.04,python,security path这三层叠加而成。若能够理解容器本质是一个进程组的话,也就能够自然地理解为什么Docker镜像为什么是多层叠加。在该例中,ubuntu 16.04为一个进程,python也为一个进程,security path也为一个进程。这三个进程构成了一个进程组,然后,这个进程组被称为一个容器!

正是这样松散的镜像结构,赋予了docker随意按用户所需创造容器的能力。根据业务需求的不同,就可以随意装配不同的运行环境。关于这些镜像与镜像之间具体是如何适配的,暂未知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值