Docker和虚拟机都是用于隔离和运行应用程序的技术,两者在实现方式上存在差异。
虚拟机是借助虚拟机管理程序在宿主机操作系统上去创建新的虚拟机操作系统,然后在虚拟机操作系统上有相应的运行时环境和应用程序。
而Docker是直接在操作系统层面之上实现的虚拟化,所有容器共享宿主机操作系统,只有运行时环境和应用程序,通过Namespace能力做隔离、使用Cgroup能力限制每个容器使用的资源(CPU、 内存、磁盘IO)。
Docker相比虚拟机更轻量、占用的资源更少、启动速度更快(docker秒级启动、虚拟机是分钟机启动)、性能损坏更少、可支持的数量更多、镜像大小更小、可移植性更好。但是Docker的隔离性、安全性相比虚拟机更差。
虚拟机实现方式六种NameSpace
- pid namespace:隔离进程 ID。每个容器都有自己的 PID 空间,容器内的进程在容器外是不可见的。
- network namespace:隔离网络接口。每个容器都有自己的网络栈,包括网络接口、路由表、防火墙规则等。
- ipc namespace:隔离进程间通信(IPC)。容器内的进程不能与容器外的进程进行 IPC 通信。
- mount namespace:隔离文件系统挂载点。每个容器都有自己的文件系统挂载点,容器内的挂载操作不会影响到容器外。
- uts namespace:隔离主机名和域名。每个容器可以有自己的主机名和域名,与宿主机和其他容器独立。
- user namespace:隔离用户和用户组。容器内的用户可以映射到宿主机上的不同用户,使得容器内的用户在容器外没有权限。
Cgroup四大功能
- 资源的限制:Cgroup可以对进程组使用的资源总额进行限制。
- 优先级分配:通过分配的CPU时间片数量及磁盘IO带宽大小,实际上就是相当于控制了进程运行的优先级
-
资源统计:Cgroup可以统计系统资源使用量。比如cpu使用时间,内存使用量等。
可用于按量计费。 - 进程控制:可以对进程组执行挂起,恢复等操作。
网友评论