一、什么是Docker:
Docker容器本质上是宿主机上进程,三个特点:
1.通过namespace实现了资源隔离;完成一个容器需要6项目隔离:
namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWIPC 信号量,消息队列和共享内容
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络设备/网络栈/端口等
Mount CLONE_NEWNS 挂载点(文件系统)
User CLONE_NEWUSER 用户和用户组
Linux实现namespace的目的就是线下轻量化虚拟化服务。
2.通过cgroups实现资源限制;
cgroups是Linux内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合或者分隔到按资源划分登记的不同组内,从而为系统资源管理提供一个统一的框架。
通俗的地讲,cgroups可以限制,记录任务组所使用的物理资源(包括CPU,Memory,IO等)为容器实现虚拟化提供基本保证,是构建Docker等一系列虚拟化管理工具的基石。
本质上来说,cgroups是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源调度触发相应的钩子以达到资源追踪和限制的目的。
3.通过写时复制机制(copy-on-write)实现了高效的文件操作。
二、Docker架构:
Docker Daemon作用:
Docker Daemon是Docker最核心的后台进程,它负责响应来自Docker Client的请求,然后将这个请求翻译成系统调度完成容器的管理操作。该经常会在后台启动一个API Server,负责接收由Docker client发送的请求;接收到的请求将通过Docker daemon分发调度,再有具体的函数来执行请求。
Docker client:
Docker client是一个泛称,用来向Docker daemon发送请求,,执行相应的容器管理操作。它既可以是命令行工具docker,也可以是任何遵循了Docker API的客户端。
libcontainer分为三大块内容:
(1)容器的创建以及初始化;
(2)容器生命周期管理;
(3)进展管理,调用方为Docker的execdriver。
网友评论