与传统的虚拟化技术相比1.与宿主使用同一个内核,性能损耗更小2.不需要指令模拟化3.轻量级隔离,在隔离的同时还提供共享机制,以实现容器和宿主的资源共享

容器时在linux本机运行,并与其他容器共享主机的内核,它运行的一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。 虚拟机运行的是一个完整的操作系统,通过虚拟管理程序对主机资源进行虚拟访问,相比i之下需要 的资源更多。

docker本质就是宿主机的一个进程,docker通过namespace实现资源隔离,通过cgroup实现资源限制,通过COW(Copy On Write)实现了高效的文件操作

Namespace

  • UTS 主机名与域名
  • IPC 信号量、消息队列、共享内存
  • PID 进程编号
  • NETWORK 网络设备、网络栈、端口等
  • MOUNT 挂载点
  • USER 用户和用户组

Cgroup

Cgroup的API以一个伪文件系统的方式实现 cgroup的组件管理操作单元可以细粒度到线程级别。用户可以创建和销户cgroup,从而实现 的资源分配和再利用

  • 资源限制 可以对任务使用的资源总额i进行限制。
  • 优先级限制 通过分配的cpu时间片数量以及磁盘IO宽带大小,实际上相当于控制了任务运行优先级
  • 资源统计 可以统计系统的资源使用量,如cpu、内存用量
  • 任务控制 cgroup可以对任务执行挂起、恢复等操作

网络架构

  • bridge 为每一个容器分配、设置IP,并将容器连接到一个docker0的虚拟网桥,默认为该模式 Bridge的桥接模式的实现步骤如下
    • Docker Daemon利用veth pair技术,在宿主上创建一对对等虚拟网络接口设备,假设为veth0和veth1。veth pair技术的特性可以保证无论在哪个vth收到网络报文,都将报文传输给另一方, veth pair 虚拟以太网对是linux系统中的一种网络设备类型,它通常用于在不同命名空间之间提供连接。每个vth pair实际上是由两个虚拟网络接口组成的,这两个接口相通,当数据从一个接口进入,他立即会从另一个接口输出。这种机制使得veth pairi成为容器网络、隔离网络环境间通信的理想选择。 sudo ip link add veth0 type veth peer name veth1
    • Docker Daemon将veth0附加到Docker Daemon创建的docker0网桥上。保证宿主机的网络报文可以发往veth0
    • Docker Daemon将veth1添加到Docker Container所属的namespace下,并改为eth0。
  • host 使用宿主IP
  • none 不设置IP
  • container 与指定的容器共享IP