容器
一种虚拟化的方案
操作系统级别的虚拟化
只能运行相同或相似内核的操作系统
依赖于linux内核特性:Namespace和Cgroups(Control Group)
什么是Docker
将应用程序自动部署到容器
GO语言开源引擎
docker的目标
提供简单轻量的建模方式
职责的逻辑分离
快速高效的开发生命周期
鼓励使用面向服务的架构
docket的使用场景
- 使用Docker容器开发,测试,部署服务
- 创建隔离的运行环境
- 搭建测试环境
- 构建多用户的平台即服务(Paas)基础设施
- 提供软件即服务(SaaS)应用程序
- 高性能,超大规模的宿主机部署
虚拟机的缺点
- 资源占用多
- 冗余步骤多
- 启动慢
Linux 容器
Linux容器不是模拟一个完真的操作系统,而是对进程进行隔离。有了容器,就可将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一的运行
Dockery依赖的Linux内核特性
Namespaces 命名空间
编程语言
封装 -》代码隔离
操作系统
系统资源的隔离
进程,网络,文件系统。。。
Linux内核实现命名空间的主要目标是实现轻量型虚拟化服务就是容器
在同一命名空间的下的进程可以感受彼此的变化,而对其它命名空间的进程一无所知
- PID (Process ID) 进程隔离
- NET (Network) 管理网络接口
- IPC (InterProcess Communication) 管理跨进程通信的访问
- MNT (Mount) 管理挂载点
- UTS (Unix Timesharing System) 隔离内核和版本标识
Control groups (cgrioup)控制组
资源限制
优先级
资源计量
资源控制
Docker容器的能力
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用Cgroup将CPU和内存之类的资源独立分配给每个Docker容器