docker 与虚拟机 区别
虚拟机:对硬件虚拟化,不同的llinux内核。
docker :只是将容器与操作系统隔开,各个容器之间隔开
虚拟机的 Hypervisor 创建了一个非常牢固的边界,以防止应用程序突破它,而容器的边界不那么强大。
==============================================================================
容器通过Linux的Namespace
和Cgroups
技术对应用程序进程进行隔离和资源限制。
Namespace
的作用是环境隔离,它让应用程序只看到该Namespace
内的世界。而Cgroups 的作用是限制分配给进程的宿主机资源。不过,对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有太大区别。
对于Namespace
技术,这里做一个稍微深入一点的解读。通过Mount Namespace
,容器可以修改进程对自己的文件系统“挂载点”的认知。在容器进程启动之前重新挂载它的整个根目录"/",这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。rootfs只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。同一台机器上的所有容器,都共享宿主机操作系统的内核。[3]
Linux CGroup
全称Linux Control Group
,是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。Cgroup
可让您为系统中所运行任务(进程)的用户定义组群分配资源—比如CPU时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的Cgroup
,拒绝Cgroup
访问某些资源,甚至在运行的系统中动态配置您的Cgroup
。[4]
回过头来谈谈操作系统内核,由于同一台宿主机上的所有容器都共享宿主机的操作系统内核,那么如果有一个容器里的应用程序需要配置内核参数,跟内核进行直接交互,则这些参数对所有容器来说就像一个“全局变量”,牵一发而动全身。
这也是容器劣势的主要原因,正是因为容器共享宿主机操作系统内核,因此不能像虚拟机一样模拟出完整的硬件机器充当沙盒,从而实现完全隔离。也就是说,容器是进程级的隔离,它可以通过影响宿主机操作系统内核来影响其他容器。
但容器还是有很多优势。首先,容器的空间占用比虚拟机小很多,甚至可以小到10MB,和虚拟机动则数GB相比十分小巧;其次,容器能轻松限制内存和CPU使用率,相比虚拟机采用hypervisor
来实现虚拟化更加轻量;同时,正是由于容器体积小、采用的技术(Containerzation Engine)更轻量,使得它启动十分迅速,这十分有利于快速扩展。
参考:
https://www.cnblogs.com/JasonCeng/p/14814888.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现