基于Linux内核,因此可以装载各种语言应用。是一种崭新的Paas微平台。本质是一个允许创建镜像并让镜像的实例运行在容器的软件。Docker利用容器将资源进行有效隔离,提高了安全性。
namespace
对容器进行网络、通信、文件、权限等对象的隔离。
6项隔离
cgroups
实现了对系统资源的限额和度量。
其他Linux Kernel相关技术
selinux,apparmor:增强对容器的访问控制。
capabilities:将root的权限分割成各种不同的capabilities权限,从而更严格控制容器的权限。
netlink:完成容器的网络环境配置及创建。
容器管理技术
lxc;第一个完整意义的容器管理技术,可方便的创建、启动及停止容器,也可以同过lxc操作容器中的应用或查看容器运行状态。
libcontainer:Docker开发的原生的容器管理技术来代替lxc。
Docker构造:Client-Server
Docker技术原理
execdriver:存储了容器定义的配置信息。libcontainer拿到配置信息后将会调用namespace,cgroups等技术完成容器的创建及管理。
networkdriver:完成容器网络环境的配置。
graphdriver:管理容器镜像。
Docker VS VM
为啥隔离性VM强:VM各个系统用各自内核,而Docker共用一个。
Docker容器
三种状态:
Docker镜像
镜像下载到容器后,run启动容器;
容器修改后,commit保存新的镜像(然而Dockerfile的build更常用)。
层级结构。
build,ship,run
一次构建,任何地方运行。
Docker数据卷
数据卷存在的意义:
- 容器运行时可使用数据卷中的文件。
- 数据卷可在多个容器间共享。
- 存储容器运行过程中产生的数据。
- 方便主机对容器数据的访问。
Docker网络模式
Bridged:容器可与主机上的容器,主机外部进行通信。
Host:容器只能与主机通信。
Container:容器只能与容器通信。
None:没网。
容器编排
管理容器下的主机,容器及容器及其逻辑关系。
Docker平台三大编排工具
- Mesos
Mesos构建的Docker平台中,容器为最小的单元!
Slave安装在集群节点上,会将节点的资源使用情况周期性的报告给Master。
Master为管理集群节点。
Executer为容器的引擎。
Mesos配合计算架构的Framework进行资源调度。
1. Master定期将所有主机的计算机资源使用情况报告给Framework Scheduler;
2.Scheduler调配后下发部署的任务给集群节点;
3.节点上的Framework Executor获取任务进行容器的部署;
4.节点将部署结果反馈给Master;
5.Master会更新最新的主机资源状态给Scheduler。
Mesos一般与Marathon,Zookeeper一起使用构建Docker平台,如图,Mesos为一个可调用Docker引擎的Framework,Marathon可将容器按一定的调度策略部署到合适的主机上,Zookeeper保证Mesos和Marathon管理节点的高可用性,当Master节点宕机后,可快速选出新的Master节点,从而不影响整个逻辑架构。Zookeeper本身也为分布式的高可用架构。
- Kubernetes
Kubernetes构建的单元中,pod是最小的单元,容器封装在pod中!
pod
同一个pod中的容器可方便的共享存储;
当一个存储目录挂载到一个容器下时,同个pod中的另一个容器也可以访问到这个存储。
架构
etcd:集群管理工具。
minion:普通节点。
master:管理节点。
minion的kublet结合其cAdvisior及etcd将节点信息汇总到master。
master使用scheduler按一定的调度策略将pod调度到各个minion,使用repulatation,controller控制pod的数量及伸缩,使用services分配pod的IP和处理pod的负载均衡。
- Swarm(Docker原生开源容器管理项目)
三者对比
Mwsos经历了大规模集群运行多年的考验;
Kubernetes本身就脱胎于谷歌的集群管理工具;
Swarm与Docker结合更为紧密。
负载均衡与服务发现
负载均衡:请求到达负载均衡器上时,负载均衡器将其平均分配到每个容器。
常用的负载均衡技术:haproxy,LVS,F5,Nginx.
服务发现:自动将容器的配置信息,包括IP,端口,域名等上传到配置中心。负载均衡器会周期性的从配置中心获取相关的配置信息,并且将容器加入相关的负载均衡器访问架构中。
常用的服务发现技术:Etcd,Zookeeper,Consul。
日志管理
容器时代对日志处理平台的要求是:集中化、海量存储、灵活过滤、快速查询、伸缩性架构、高可用、强大的UI。
Docker监控
Docker平台架构
应用场景
快速交付与CICD
云间迁移
弹性扩展
容器化后,应用扩展其实就是拉取镜像部署更多容器的过程。