1.主机级虚拟化和容器级虚拟化。
主机级虚拟化需要虚拟出一套完整的内核空间以及用户空间,其中操作系统实现进程和硬件的天然隔离,注(真正产生价值的是运行在用户空间的应用进程而不是出于通用目的而设计的资源管理平台。)
容器级虚拟化仅虚拟出用户空间,一个用户空间只运行一个进程,容器在运行时能看到的边界就是自己在用户空间的边界,而内核空间以共享的方式进行加所以容器级虚拟化的安全性以及隔离性无法和主机级虚拟化相媲美
2.chroot功能:实现切根,并不能真正实现用户空间和内核空间的彻底隔离,他所隔离的仅仅是你看上去的空间
3.linux namespaces:是linux内核的一种机制,linux调用内核中的name spaces能虚拟出多个用户空间,通过系统调用向外进行输出
namespaces 系统调用参数 隔离内容 所需内核版本
UTS CLONE_NEWUTS 主机名和域名 2.6
IPC ---------IPC 信号量,消息队列和共享内容 2.6
PID ---------PID 进程编号 2.6
network ---------NET 网络设备,网络栈,端口等 2.6
mount ---------WNS 挂载点(文件系统) 2.4
user ---------USER 用户和用户组 3.8
note(centos6被天然排除在外,因为centos6的内核版本是2.4)
4.cgroups (control groups):也是内核的一种机制,主要作用就是将系统资源分配成多个组,把每个组内的资源量分配到特定的容器,防止因单个容器占用大量资源导致其他容器无法运行
一旦出现内存不足就会出现oom,原因是内存是不可压缩型资源,但cpu还好,属于可压缩型资源,但是也会排队.
blkio:块设备IO
cpu
cpuacct:cpu资源使用报告
cpuset:多处理器平台上的cpu集合
devices:设备访问
freezer:挂起或恢复服务
memory:内存用量及报告
perf_event:对cgroups中的任务进行统一性能测试
net_cls:cgroup中的任务创建的数据报文的类别标识符
5.LXC(linux container):linux容器,较早的容器技术,docker就是对lxc的二次封装,其实他们都是容器的前端工具,容器其实是linux的内核机制
6.docker镜像文件:把操作系统用户空间所用到的所有组件编排并打包成一个文件就叫做镜像文件,而镜像文件会放在一个统一的仓库中就是dockerhub,故
dcoekr创建容器仅需到仓库拉取就可以.
7.容器技术的好处:
1.实现了用户空间的隔离,防止因一个进程被劫持而波及其他进程
2.节约了系统资源
容器技术的坏处:
1.更加占用存储空间
2.进程出现故障难以处理,调试工具需要准备多份
8.docekr镜像构建方式基础:分层构建联合挂载
例如:先做一个最底层的centos镜像,当想使用nginx的时候,只需要基于centos镜像之上安装就成了一个nginx镜像,但是这个nginx镜像只包含本身
并不包含centos,所以他们是两个不同的镜像底层是centos上层是nginx,当叠加在一起的时候就是一个完整nginx镜像,所以当需要有多个不同
的应用时例如:tomcat,mysql等,只需要一个centos层分别联合其他镜像层,就可以生成不同服务的容器.但是每一层的镜像都是只读的.当挂载
到容器上时docker会构建出一个读写层,所以每个容器只能在自己的读写层进行读写操作.一旦用户删除文件并不是真正的删除,而是在读写层
将该文件标记为不可见.
9.容器数据的存储:一般采用外部设备进行持久存储,脱离宿主机容器,例如ceph,防止容器down掉导致数据消失.
10.容器编排:docker不能让容器按照一定的次序启动,所以需要一个能在docker的基础之上能够把这种应用程序之间的依赖关系,从属关系,隶属关系反应在启动关
闭时的次序和管理逻辑中的功能就叫做容器编排