前言:一直听说docke,但是一直没用去深入了解过,直到公司22年要开始中台项目了,会开始用到docker和K8S技术,于是便想开始学习,本文档仅供个人参考,如有记录不对不详地方,烦请指教。
一、虚拟化技术
目前市场上的虚拟化技术分为两大类
(1)主机虚拟化
a:虚拟化物理硬件平台,安装虚拟机管理器实现虚拟化,如AIX的Lpar划分;
b:先装客户机器,再来进行进一步虚拟化,如VMware、KVM、workstation;
主机虚拟化的虚拟技术从底层到前端分别是:硬件平台——操作系统——内核(资源的分配和管理)——用户空间(隔离应用程序进程)
(2)容器虚拟化
硬件服务平台——虚拟隔离环境管理器——用户空间(容器、隔离环境)
由此可见容器极大的减少了资源的消耗,但是也随之而来带来很大的一些使用操作方面的不便捷性。
a、虚拟隔离环境管理器
Control Groups(cgroups)
·groups
·blkio:块设备IO
·cpu:CPU
·cpuacct:CPU资源使用报告
·cpuset:多处理器平台上的CPU集合
·devices:设备访问
·freezer:挂起或恢复任务
·memory:内存用量及报告
·perf_event:对cgroup中的任务进行统一性能测试
·net_ds:cgroup中的任务创建的数据报文的类别标识符
b、用户空间
namespace 系统调用参数 内容 内核版本
UTS CLONE_NEWUTS 主机名和域名 2.6.19
IPC CLONE_NEWIPC 信号量、消息队列和共享内存 2.6.19
PID CLONE_NEWPID 进程编号 2.6.24
Network CLONE_NEWNET 网络设备、网络栈、端口等 2.6.29
Mount CLONE_NEWNS 挂载点(文件系统) 24.19
User CLONE_NEWUSER 用户和用户组 3.8
二、容器虚拟化的发展
容器一直都在使用和发展为什么到docker才开始广泛使用呢?
在docker没出来之前,大家都用LXC(Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。)
docker一定程度上来说是LXC的增强版,docker建立image镜像库,一个容器内仅仅运行一个进程,使用容器的通讯方式进行通讯。
docker基于镜像启动容器,在应用上分层构建,在数据上联合挂载,使得在使用的便捷性和可用性上大大的超过了LXC。
但是docker虽然实现了轻量级及其易用性,但是在资源的编排上并没用起到一个很好的作用,所以市面上出现了很多资源编排的工具,如下:
·nmp
·machine+swarm+compose
·mesos+marathon
·kubernetes->k8s google公司研发的
·libcontainer->runC docker公司
为了保障容器镜像的统一性,指定了一个统一的标准
CNCF,全称Cloud Native Computing Foundation(云原生计算基金会),
OCF,开放环境容器标准