-
快速高效的开发生命周期;
-
鼓励使用面向服务的架构,即单个容器运行单个应用。
Docker原理
========
Docker是一个客户端一服务器(C/S)架构的程序。Docker 客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker及一整套RESTful API,可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
Docker依赖的Linux的内核特性包括Namespaces命名空间和Control groups(c groups)控制组。
Namespaces命名空间:
-
PID (process ID),进程ID隔离;
-
NET (network),管理网络端口;
-
IPC ( InterProcess Communication),进程间通信;
-
管理跨进程通信的访问;
-
MNT (Mount),管理挂载点;
-
UTS (UNIX Timesharing System),隔离内核和版本标识;
-
Control groups(c groups),控制组。
Control groups(c groups)控制组:
-
资源限制;
-
优先级设定;
-
资源度量;
-
资源控制及资源分配;
Docker容器的能力包括:
-
文件系统隔离——每个容器都有自己的root文件系统,可以独立挂载外部文件系统。
-
进程隔离——每个容器都运行在自己的进程环境中,相互之间互不干扰。
-
网络隔离——容器间的虚拟网络接口和IP地址都是分开的。
-
资源隔离和分组——使用cgroup将CPU和内存等资源独立分配给每个Docker容器。
更轻量级的虚拟化
========
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。我们先来看一下虚拟机与Docker的架构对比,
从下到上理解上图
-
基础设施(Infrastructure):一般是服务器或者云主机。
-
虚拟机管理系统(Hypervisor):利用Hypervisor, 可以在主操作系统之上运行多个不同的从操作系统,可以构建在基础设施上,也可以构建在操作系统上。
-
客户机操作系统(Guest Operating System):假设运行3个相互隔离的应用,则需要使用Hypervisor启动3个客户机操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有900MB,这就意味着它们将占用2.7GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存资源。
-
各种依赖:每一个客户机操作系统都需要安装许多依赖。
-
应用:安装依赖之后,就可以在各个客户机操作系统分别运行应用了,这样各个应用就是相互隔离的。
再来看一下Docker的架构,