与传统的虚拟化技术相比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。
- Docker Daemon利用veth pair技术,在宿主上创建一对对等虚拟网络接口设备,假设为veth0和veth1。veth pair技术的特性可以保证无论在哪个vth收到网络报文,都将报文传输给另一方,
veth pair 虚拟以太网对是linux系统中的一种网络设备类型,它通常用于在不同命名空间之间提供连接。每个vth pair实际上是由两个虚拟网络接口组成的,这两个接口相通,当数据从一个接口进入,他立即会从另一个接口输出。这种机制使得veth pairi成为容器网络、隔离网络环境间通信的理想选择。
- host 使用宿主IP
- none 不设置IP
- container 与指定的容器共享IP