这是一本硬核的书,为什么这么说呢?
第一,从背后的支持的理论分析,得出docker不是什么新的技术
第二,从产业背景的分析,docker从一个工具型软件逐渐变成一个分布式的容器的解决方案
第三,从安全性来说,天生就是不怎么安全
第四,从编排工具来看,谷歌的k8s,docker的原生的编排工具,沦为二等市民
这本书我打算写四篇文章
这是第一篇。 docker 背后的理论支持
容器=cgroup+namespace+rootfs+容器引擎(用户态工具)
Cgroup: 资源控制
NameSpace: 访问隔离
rootfs:文件隔离隔离
容器引擎: 生命周期的控制
第一个理论 cgroup
主要是做资源控制。其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。这些资源包括,cpu,内存,block i/o和网络带宽。
devices :设备全县控制
cpuset:分配制定的cpu和内存节点
cpuacct: 统计cpu使用情况
memory:限制使用内存的上限
freezer: 冻结(暂停)Cgroup 中的进程
net_prio: 设置进程的网络流量优先级
huge_tlb: 限制hugeTLB的使用
pref_event:允许perf工具基于Cgroup分组做性能测试
cpu:控制cpu占用率
第二个理论 namespace
namespace是将内核的全局资源封装,使得每个Namespce都有一份独立的资源。因此不同的进程在各自namespace内对同一种资源的使用不会相互干扰。
目前liunx内核总共实现了6种namespace:
IPC:隔离System V IPC和POSiX 消息队列
network:隔离网络资源
mount: 隔离文件系统的挂载点
PID: 隔离进程ID
UTS: 隔离主机和域名
User:隔离用户ID和组ID
第三个好用的restful接口
简洁好用的Docker api对docker 及其周边生态的迅速崛起起到不可估量的促进作用。依赖于良好的设计以及rest架构与生而来优势,Docker APi向业界清晰表明了docker强大的功能以及灵活性。
容器造就docker
关于docker是否是docker的核心技术,业界一直存在争议。有人认为Docker的核心技术是对分层景象的创新使用,也有人认为其统一了打包的分发和部署方式,为服务器级别的“应用商店”提供了可能。但是这一切靠的都不是容器技术,hype也可以实现。
docker 的诞生主要是为了完善当时的lxc,使用户可以更方便的使用容器,让容器可以更好的应用到项目开发和部署的各个流程中。从一开始lxc就是docker的唯一容器引擎。可以说,docker 是为了容器而生。
docker 一起发展和被大家熟知的,还有被叫做的“微服务(micro service)”的设计哲学。
这把docker容器的优势发挥的凌厉尽致。容器作为liunx平台的轻量级虚拟化,及其核心优势是跟内核的无缝融合,其在运行效率上的优势和极小的系统开销,与需要将各个组件单独部署的微服务应用完美融合。而且微服务在隔离性问题上更加可控,这也避免了容器相对传统虚拟机的短板。