首页 > 其他分享 >容器技术和虚拟机技术的对比

容器技术和虚拟机技术的对比

时间:2024-08-24 20:47:43浏览次数:12  
标签:容器 虚拟机 宿主机 技术 Linux 进程 docker 运行

目录

容器和虚拟机的对比

下面这张图是 docker 官方中截取下来的,我们来分析下 docker 和 传统 VM 的区别:

迁移性和性能

传统 VM: 需要基于 Hypervisor 的硬件虚拟化技术,模拟出 CPU,内存等硬件。然后在其上搭建一套完整的操作系统,自然在性能上会有很大的损失。迁移自然更不用说,传统的 ova 导出后就是一个完整的操作系统。
Docker:Docker 将 Hypervisor 的位置换成自己的 Docker Engine,然后运行的容器仅仅是一个特殊的进程,自然性能不会有太大的损失。并且可以应用和其所需要的系统文件打包成镜像,无论在哪读可以正常运行,而且相对于 ova 来说体积也小了更多。(需要内核支持)

一般来说,运行着 CentOS 的 KVM,启动后,在不做优化的前提下,需要占用 100~200M 内存。在加上用户对宿主机的调用,需要通过虚拟化软件拦截和处理,又是一层性能损耗,特别是对计算资源,网络和磁盘I/O等。

隔离性

传统 VM:由于是虚拟化出一套完整的操作系统,所以隔离性非常好。比如微软的 Azure 平台,就是在 Windows 服务器上,虚拟出大量的 Linux 虚拟机。
Docker:在隔离性上相差就很多了,因为本身上容器就是一种进程,而所有的进程都需要共享一个系统内核。

  • 这就意味着,在 Windows 上运行 Linux 容器,或者 Linux 宿主机运行高版本内核的容器就无法实现。
  • 在 Linux 内核中,有许多资源和对象不能 Namespace 化,如时间,比如通过settimeofday(2) 系统调用修改时间,整个宿主机的实际都会被修改。
  • 安全的问题,共享宿主机内核的事实,容器暴露出的攻击面更大。

资源限制

传统 VM:非常便于管理,控制资源的使用,依赖于虚拟的操作系统。
Docker:由于 docker 内资源的限制通过 Cgroup 实现,而 Cgroup 有很多不完善的地方,比如

  • 对 /proc 的处理问题。进入容器后,执行 top 命令,看到的信息和宿主机是一样的,而不是配置后的容器的数据。(可以通过 lxcfs 修正)。
  • 在运行 java 程序时,给容器内设置的内存为 4g,使用默认的 jvm 配置。而默认的 jvm 读取的内存是宿主机(可能大于 4g),这样就会出现 OOM 的情况。

解决的问题

1.容器是如何进行隔离的?

在创建新进程时,通过 Namespace 技术,如 PID namespaces 等,实现隔离性。让运行后的容器仅能看到本身的内容。
比如,在容器运行时,会默认加上 PID, UTS, network, user, mount, IPC, cgroup 等 Namespace。

2.容器是如何进行资源限制的?

通过 Linux Cgroup 技术,可为每个进程设定限制的 CPU,Memory 等资源,进而设置进程访问资源的上限。

3.简述下 docker 的文件系统?

docker 的文件系统称为 rootfs,它的实现的想法来自与 Linux unionFS 。将不同的目录,挂载到一起,形成一个独立的视图。并且 docker 在此基础上引入了层的概念,解决了可重用性的问题。
在具体实现上,rootfs 的存储区分根据 linux 内核和 docker 本身的版本,分为 overlay2 , overlay, aufs, devicemapper 等。rootfs(镜像)其实就是多个层的叠加,当多层存在相同的文件时,上层的文件会将下层的文件覆盖掉。

4.容器的启动过程?

1.指定 Linux Namespace 配置
2.设置指定的 Cgroups 参数
3.切换进程的根目录

5.容器内运行多个应用的问题?

首先更正一个概念,我们都说容器是一个单进程的应用,其实这里的单进程不是指在容器中只允许着一个进程,而是指只有一个进程是可控的。在容器内当然可以使用 ping,ssh 等进程,但这些进程是不受 docker 控制的。
容器内的主进程,也就是 pid =1 的进程,一般是通过 DockerFile 中 ENTRYPOINT 或者 CMD 指定的。如果在一个容器内如果存在着多个服务(进程),就可能出现主进程正常运行,但是子进程退出挂掉的问题,而对于 docker 来说,仅仅控制主进程,无法对这种意外的情况作出处理,也就会出现,容器明明正常运行,但是服务已经挂掉的情况,这时编排系统就变得非常困难。而且多个服务,在也不容易进行排障和管理。
所以如果真的想要在容器内运行多个服务,一般会通过带有systemd或者supervisord这类工具进行管理,或者通过--init方法。其实这些方法的本质就是让多个服务的进程拥有同一个父进程。
但考虑到容器本身的设计,就是希望容器和服务能够同生命周期。所以这样做,有点背道而驰的意味。

标签:容器,虚拟机,宿主机,技术,Linux,进程,docker,运行
From: https://www.cnblogs.com/even160941/p/18378231

相关文章

  • 第7篇:在虚拟机 centos7上搭建jira管理工具
    本文详细介绍了如何在CentOS7系统上下载配置Jira,包括创建文件夹、下载安装包、解压、修改配置文件以及设置JVM和MySQL环境。同时,文章还涉及了JDK1.8的安装,数据库的创建,以及Jira的破解步骤,包括替换特定jar文件和配置数据库连接。最后,文章提到了启动Jira服务并进行汉化包的下载链接......
  • 技术分享-商城篇-用户订单管理(十五)
    前言在前面的文章中,我们详细阐述了商品模块、购物模块、支付模块等B2B2C(Business-to-Business-to-Consumer)电商中核心基础模块,接下来我们来聊一下基础模块中最后一个环节订单模块,订单模块属于购物体系闭环内容,也是必不可少的基础模块,它承接着后续业务操作,如售后、发货、订......
  • java+vue计算机毕设山西工程技术学院任务流程管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今信息化快速发展的时代,高校及各类组织机构的日常运营与管理日益依赖于高效的任务流程管理系统。山西工程技术学院作为一所培养工程技术人才的高......
  • 学编程的普通人如何通过技术变现,副业月入过万?python兼职,学习
    前言我有一个朋友,在国企工作,月薪一万出头。前几个月他和我说,他辞职了。说实话在这种行情下,敢裸辞的都是勇士,我问他为啥要辞职,他说现在他的副业已经超过主业收入了,上班反而耽误他挣钱,他光靠做副业,最高一个月收入6w+,这比上班香多了,时间还自由。说这个并不是主张让大家辞职,而......
  • 无线遥控技术研究433MHZ
    1.主流的有433MHZ的,主要用在遥控玩具上,使用芯片EV1527,其中1527是数据的编码格式,OOK是无线发射数据的通信方式,433M是载波频率。原理图如下,其中根据4个按键的组合,在TXD输出组合波形 TXD的输出波形如下: 方波需要发恶化电路发射出去,发射电路如下,那么理论上可以用单片机替代E......
  • 信息技术期刊推荐
    信息技术期刊推荐《计算机教育》《中小学信息技术教育杂志》《教育教学论坛》《电脑校园》《中国信息技术教育》《信息技术时代》《教育信息技术》《中G教育信息化》《中小学信息技术教育》《信息技术与信息化》《信息技术》《计算机技术与发展》《电脑与电信》《......
  • 信息技术学科“无生上课”试讲备课要领
    信息技术学科“无生上课”试讲备课要领“无生上课”也叫模拟上课,模拟讲课最大特征是模拟,模拟就是接近真实,所以要和真实课堂教学接近。要求眼里有学生,心里有学生,话里有学生。接近按照常规课上,只不过省略了师生互动的真实过程,但是这个过程应该体现出来,怎样引导、启发、调动、设问…......
  • 基于Java技术的量化积分管理系统设计与实现(2025年毕业项目-源码+论文+部署讲解等)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.作者推荐项目12.为什么选择我?13.获取源......
  • Docker中镜像文件的打包传输、容器导出镜像及虚拟机端口映射的实现
    内网私有仓库1、Docker私有仓库是集中存放镜像的地⽅,⽽注册服务器(Registry)是存放仓库的具体服务器。仓库可以被认为是⼀个具体的项⽬或⽬录。Docker公共仓库:https://hub.docker.com2、Docker私有仓库的作⽤:1)镜像上传到公共仓库不⽅便管理,且仅需要局域⽹⽤户之间传递......
  • 大数据技术之 Flume概述、安装(1)
    目录Flume概述 Flume定义为什么选用Flume Flume基础架构 AgentSourceSink Channel EventFlume安装 Flume安装部署 安装地址 安装部署Flume概述 Flume定义Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传......