目录

Docker平台架构

一、Docker基础

Docker平台架构

  • Docker是C/S模式的架构,后端是一个松耦合架构
  • Docker运行的基本流程:
  1. 用户使用Docker Client和Docker Daemon建立通信,并发送请求给后者
  2. Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能,使其可以接受Docker Client的请求
  3. Docker Engine执行Docker内部的一系列工作,每一项工作都是以job形式存在
  4. job运行过程中,当需要容器镜像时,从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载的镜像以Graph的形式存储
  5. 当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器的网络环境
  6. 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成
  7. Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作

Docker隔离原理

  1. Docker用go语言编写,并利用Linux内核的多种功能。Docker使用名称空间来提供容器的隔离工作区。运行容器时,Docker会为该容器创建一组名称空间,容器的每个功能都在单独的名称空间中运行,并且对其访问权限仅限于该名称空间
namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机和域名
IPC CLONE_NEWIPC 信号量、消息队列
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络设备、网络栈、端口等
Mount CLONE_NEWNS 挂载点(文件系统)
User CLONE_NEWUSER 用户和用户组
  1. cgroup资源限制 cgroup提供的主要功能如下:
  • 资源限制:限制任务使用的资源总额,并在超过这个配额时发出提示
  • 优先级分配:分配CPU时间片数量及磁盘IO带宽大小、控制任务运行的优先级
  • 资源统计:统计系统资源使用量,如CPU使用时长、内存使用量等
  • 任务控制:对任务执行挂起、恢复等操作 cgroup每种子系统独立地控制一种资源:
子系统 功能
cpu 使用调度程序控制任务对cpu的使用
cpuacct(CPU Accounting) 自动生成cgroup中任务对cpu资源使用情况的报告
cpuset 为cgroup中的任务分配独立的CPU(多处理器系统)和内存
devices 开启或关闭Cgroup中任务对设备的访问
freezer 挂起或恢复cgroup中的任务
memory 设定cgroup中任务对内存使用量的限定,并生成这些任务对内存使用量的报告
perf_evernt(LinuxCPU性能探测器) 使cgroup中的任务可以进行统一的性能测试
net_cls(docker未使用) 通过登记识别符标记网络数据包,从而允许Linux流量监控程序(Traffic Controller)识别从具体cgroup中生成的数据包

为什么Docker比vm虚拟机快?

  • Docker有着比虚拟机更少的抽象层,由于Docker不需要hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存使用率上Docker在效率上有明显的优势
  • Docker利用的是宿主机的内核,而不需要加载操作系统OS内核,当新建一个容器的时候,Docker不需要和虚拟机一样重新加载一个操作系统内核。避免了寻找、加载操作系统内核返回等比较耗时耗资源的过程;当新建一个虚拟机的时候,虚拟机需要加载OS,返回新建过程是分钟级的。而Docker直接利用宿主机的操作系统,省略了返回的过程,因此新建一个Docker容器只需几秒钟。