标签:工作流 contain 指令 应用 过程 需要 支持 硬件 变化
一、概念什么是cgroup?
对系统资源限制,创建容器的过程其实就是在创建进程,对资源的分配和维护使用cgroup来管理,包括cpu,内存,io等?
什么是namespace?
创建容器时,对容器来说就是一个全新的系统,容器内的文件系统要和宿主机文件系统隔离,网络空间隔离,用户权限隔离,这些隔离操作都是有namespace 来管理完成的
什么是unionFS?
联合文件系统,简单理解就是多个目录结构合并成一个,而各个目录结构本身物理位置并没有变化。
二、架构
1.C/S架构
组件:
docker cli: docker客户端,用来管理docker,向docker发送指令的工具
docker engine: 拉取推送镜像,对容器操作相关的api的最上层封装,直接面向client
image repository: 注册中信,存储镜像的地方
Containerd: 是一个守护进程,负责管理shim,向docker engine提供接口,使用UnixSocket通信,协议是grpc
shim: 负责管理单个容器,启动一个容器,就会启动一个shim进程, containerd管理所有容器
runC: 运行一个容器。是基于OCI标准的一个容器技术实现,是一个可以直接创建和运行容器的工具。runc直接与容器所依赖的cgroups/kernel等进行交互,负责容器所需环境
2.工作流程
docker client发出创建容器指令,docker engine接到指令后去镜像仓库拿到镜像后,通过grpc调用通知docker-containerd启动容器,docker-containerd收到通知后启动shim进程,shim进程启动后,运行runC子进程,runcC会和cgroup,kernel交互,启动容器,然后runC销毁,shim接管容器并监控容器, 整个容器创建过程完成
三、镜像和容器的关系
镜像可以理解为一系列封装好的目录,容器理解为将这些封装好的目录合并挂载,镜像是静态资源,容器是可读写的,
四、容器应用场景
1.环境一致性
2.CI/CD
3.微服务
4.弹性伸缩
5.灰度发布
五、容器与虚拟机的额区别
臃肿
的 os, 与其说是对应用隔离, 不如说是系统隔离标签:工作流 contain 指令 应用 过程 需要 支持 硬件 变化
原文地址:https://blog.51cto.com/haoyonghui/2458796