本文共 1625 字,大约阅读时间需要 5 分钟。
一种虚拟化方案
操作系统级别的虚拟化
只能运行相同或相似内核的操作系统
依赖于Linux内核特性:NameSpace和CGroups(Control Group)
提供简单轻量的建模方式
职责的逻辑分离
快速高效的开发生命周期
鼓励使用面向服务的架构
使用Docker容器开发、测试、部署服务
创建隔离的运行环境
搭建测试环境
构建多用户的平台即服务(PaaS)基础设施
提供软件即服务(SaaS)应用程序
高性能、超大规模的宿主机部署
Docker Client客户端
Docker Daemon守护进程
Docker Image镜像
Docker Container容器
Docker Registry仓库
Docker是C/S的架构,Docker的客户端向Docker的守护进程发出请求,守护进程处理完所有的工作并返回结果。Docker容器的创建运行基于Docker的镜像。Docker镜像是一个层叠的只读文件系统,最底层是一个引导系统bootfs,当一个容器启动后,这个容器将会被移动到内存中,而引导文件系统会被卸载。Docker镜像的第二层是rootfs,位于bootfs之上。rootfs可以是一种或多种文件系统,在传统的Linux中,rootfs将会以只读文件系统进行加载,当引导结束并且完成了完整性检查后,才会被切换为读写模式,但是Docker中rootfs永远是只读文件系统的状态,并且Docker使用联合加载技术在rootfs之上加载更多的只读文件系统,在外部称为一个完整的系统。Docker将这样的文件系统称为镜像。Docker的容器启动的时候将会在镜像的最顶层加载一个可读写的文件系统,在Docker中执行的程序就是在这个可写层执行的。当Docker容器启动后,这个可写层是空的,当需要修改文件系统的文件的时候,Docker将会把这个文件复制到可写层,这个可写层的文件副本将会隐藏只读层的对应的文件,这就叫做Docker写时复制。Docker使用仓库来保存用户构建的镜像,仓库分为公有仓库和私有仓库两种,Docker自己提供的Docker公有仓库叫做Docker Hub。
Docker依赖的Linux内核特性
(1)Namespaces命名空间:
编程语言中的命名空间是为了实现更好的封装,也就是代码隔离。
操作系统的命名空间是实现了系统资源的隔离,例如:进程、网络、文件系统。Linux内核实现命名空间的最主要的原因之一就是为了实现轻量级的虚拟化功能。
Docker使用了五种命名空间:
PID(Process ID) 进程隔离
NET(Network) 网络接口管理
IPC(InterProcess Communication) 跨进程通信访问管理
MNT(Mount) 管理挂载点
UTS(Unix Timesharing System) 隔离内核和版本标识
这些隔离的资源使用CGroups进行管理。
(2)Controlgroups控制组:
CGroups是Linux内核提供的可以限制、记录、隔离进程组所使用的物理资源的机制。由Google的工程师提出。在2004年整合进入Linux kernel 2.6.24。
CGroups提供的功能:
资源限制
优先级设定
资源计量
资源控制
CGroups赋予Docker的能力:
文件系统的隔离:每个Docker容器都有自己的rootfs
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟接口和IP地址都是分开的
资源隔离和分组:使用CGroups将CPU和内存之类的资源独立分配给每个Docker容器。
转载地址:http://oqsfa.baihongyu.com/