容器技术发展趋势
Posted 云计算AND容器技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器技术发展趋势相关的知识,希望对你有一定的参考价值。
容器技术已经引起了业内的广泛关注,有充分的证据表明,容器技术能够大大提升工作效率。
现在,虚拟化技术已经成为一种被大家广泛认可的服务器资源共享方式,它可以在按需构建操作系统实例的过程当中为系统管理员提供极大的灵活性。由于hypervisor虚拟化技术仍然存在一些性能和资源使用效率方面的问题,因此出现了一种称为容器(Container)的新型虚拟化技术来帮助解决这些问题,下面我们来简单聊聊容器(Container)的发展趋势。
容器(Container)VS虚拟化(VM)
一,容器(Container)
操作系统层虚拟化(OS-level virtualization)
cgroup + namespace
通过namespace隔离,通过cgroup对资源配额和namespace进行管控
二,容器与VM虚拟技术相比
硬件无关(虚拟化采用了CPU,NET的虚拟化功能),OS相关(X64,linux based)
非完整的操作系统,共享内核(节省开销,提升性能)
隔离性不强,非物理/硬件隔离,namespace隔离不完整/性能隔离控制较弱,安全侵入风险
容器与VM相比,更为轻量,性能更高(除网络);但是安全方面有待提升;
什么是Docker?
container不等于docker
基于容器技术的高级工具,提供了软件封装的一个标准以及实现
Docker VS Container
传统Container
缺少自动化,使用复杂
用法与平台耦合性高,应用范围窄,用户限制大
只解决了Run,没有解决Build和Ship
各个容器的实现方式千差万别,缺省统一的标准
Docker
提供了Portable的标准并且提供了实现
基于该标准的容器Build和Ship机制
cgroup + namespace + docker image = Docker Container
Docker加速容器技术的发展
Docker提供软件应用的集装箱,创建即部署
集装箱式应用管理环境
Image分层技术:多副本&重用,节省空间,分发迅速
模块化打包,快速部署,标准化管理,独立&隔离运行
Docker彻底改变程序的交付方式
可携带性(跨平台,免“部署”)
一致性(开发&测试&生产)
快速分发,复杂
轻量,隔离,无环境依赖
Docker的核心价值:构建标准化(Dockerfile),交付形态标准化(容器&Image),运行环境标准化(Engine)
Docker Image
多Layer
堆叠式文件系统AUFS/Device Mapper/btrfs/overlayfs
copy-on-write
”继承“性:基于共享layer的多版本
标准化格式
镜像加密
重用/共享镜像Layer,减少额外开销,节省空间
基于基础Layer的应用多版本,应用镜像的更新只拉取变更的Layer
Dockerfile & Docker Build
Base Image(OS) + Dockerfile + Docker build = App Docker image
Docker engine内置的build cli
Dockerfile & build cli是基于Docker构建CI&CD的关键
Dockerfile为快速构建Docker image而设计,提供了简单的语法
- 多条RUN/单条CMD(可覆盖)/单条EntryPoint(不可覆盖)
- 显示暴露端口EXPOSE
- 纯文本指令序列(部署Env的操作顺序)
- 保持一致,追加更新(build时使用cache加速构建)
- 指令数限制(指令合并):127layers
传统软件开发中遇到的问题
软件安装麻烦
没有root
隔离性差:不同开发人员共用环境开发
可移植性差
Docker的优势
docker简化程序部署,分层归位,所有软件都可以简化成image
是否云化,和是否采用容器并不冲突,云和非云对docker而言本身是伪命题
以docker隔离各个应用环境
应用搭建,创建docker即软件部署
Docker以及Docker的调度技术出现,拓宽了软件管理的思路和手段
对软件运行包括运行环境,配置,依赖描述都进行了标准化
在部署,运行,配置合变更方面,docker统一了管理方式
软件即镜像,申请即部署,统一管理方式
基于容器提供了标准化的管理流程:build,ship,run
不限定特定应用运行环境
一次build,各处运行,不限定在具体IaaS甚至PaaS之上
和传统的hypervisor虚拟化比较,容器(不只是Docker)到底轻在哪里?
虚拟机 |
Docker容器 |
采用CPU,网卡等硬件虚拟化技术 |
OS Level,不依赖硬件 |
隔离性强 |
共享内核和OS,隔离性弱 |
提高了资源利用率(相比物理机),但仍然不高(<40%) |
资源粒度小,利用率最高可达90% |
虚拟化性能差(>15%) |
计算/存储无损耗,网络损耗高(docker原生NAT方式20%+) |
虚拟机镜像庞大(十几G~~几十G) |
docker image 200~300M |
虚拟机创建慢(>2分钟,且并发量受管理系统限制) |
秒级创建(<10s),并发受限于创库和带宽 |
虚拟机启动慢(>30s) |
秒级(<1s,不含应用本身启动) |
资源虚拟化粒度低(1虚4,1虚8,且随着虚拟机数量上升,虚拟化效率降低显著) |
实测可达>1000 |
hypervisor虚拟化采用硬件虚拟化技术确保了高隔离性(包括安全和可靠性),至少包括两层Hypervisor所在的HostOS和虚拟机中的GustOS(Type2虚拟化),每层是独立OS
容器则通过OS内核的namespace来隔离不同容器,严格的讲就是一个OS
容器镜像和VM镜像本质区别是:容器镜像只是容器内应用依赖的最小软件集,并不是OS,而VM镜像是完整的OS;
文章如有不妥之处,欢迎指正!谢谢!
以上是关于容器技术发展趋势的主要内容,如果未能解决你的问题,请参考以下文章
Docker 问题集锦(32) - 云原生大趋势下的容器化技术现状与发展