• docker知识点


    什么是虚拟机?

    虚拟化是在Host操作系统之上导入Guest操作系统的技术。这种技术最初是一个启示,因为它允许开发人员在同一主机上运行的不同虚拟机中运行多个操作系统。这消除了对额外硬件资源的需求。

    虚拟机或虚拟化的优点是:

    多个操作系统可以在同一台机器上运行
    在出现故障的情况下,维护和恢复很容易
    由于对基础设施的需求减少,总拥有成本也较低

    在图中,您可以看到有一个主机操作系统,其上运行着3个客户机操作系统,它们只是虚拟机。

    虚拟机的缺点

    运行多个虚拟机会导致性能不稳定,因为客户机操作系统运行在主机操作系统之上,主机操作系统将拥有自己的内核以及一组库和依赖项。这占用了大量的系统资源,即硬盘,处理器,尤其是RAM。
    管理程序不如主机操作系统有效
    启动过程很长,需要时间
    这些缺点导致了一种称为容器化的新技术的出现。现在让我告诉你容器化。

    什么是集装箱化?

    容器化是将虚拟化引入操作系统级别的技术
    它为操作系统带来了抽象,也是一种虚拟化
    容器化效率更高,因为这里没有客户操作系统,并且利用主机的操作系统,在需要时共享相关的库和资源,这与虚拟机不同。
    特定于应用程序的二进制文件和容器库在主机内核上运行,这使得处理和执行非常快。
    它们比虚拟机轻巧且速度快。

    什么是Docker?

    Docker是一个容器化平台,它以Container的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

    每个应用程序都将在一个单独的容器上运行,并拥有自己的一组库和依赖项。
    它还确保存在进程级隔离,这意味着每个应用程序都独立于其他应用程序,从而使开发人员确信他们可以构建不会相互干扰的应用程序。

    虽然Docker容器有时被称为“轻量级VM”,但它们不是VM(虚拟机)。两者都用于不同的目的,因此不能取代另一个。它们的底层架构是Docker与虚拟机的不同之处。虽然VM基于服务器虚拟化技术,但Docker使用容器虚拟化。

    让我们看看Docker和虚拟机之间的主要区别是什么

    Docker和虚拟机之间的主要区别

    OS支持

    Docker容器和虚拟机的基本架构在操作系统支持方面有所不同。容器托管在具有主机操作系统的单个物理服务器中,主机操作系统在它们之间共享。
    另一方面,虚拟机在每个VM内部具有主机OS和单独的客户OS。无论主机操作系统如何,客户操作系统都可以是任何东西 - Linux或Windows。
    Docker容器适用于您希望在单个OS内核上运行多个应用程序的情况。但是,如果您的应用程序或服务需要在不同的OS风格上运行,则需要VM。
    在容器之间共享主机操作系统使它们非常轻,并帮助它们在几秒钟内启动。因此,与VM相比,管理容器系统的开销非常低。

    安全

    在Docker中,由于主机内核在容器之间共享,因此容器技术可以访问内核子系统。因此,单个易受攻击的应用程序可以破解整个主机服务器。
    因此,出于安全原因,不建议在Docker容器中提供对应用程序的root访问权限并以超级用户权限运行它们。
    另一方面,VM是具有自己的内核和安全功能的唯一实例。因此,它们可以运行需要更多特权和安全性的应用程序。
    在Bobcares,我们在Docker中实施其他安全措施,如SELinux和AppArmor,以保护容器并防止它们相互破解或主机内核崩溃。

    可移植性

    Docker容器是可以运行所需应用程序的自包含容器。由于它们没有单独的客户操作系统,因此可以轻松地跨不同平台移植它们。
    与VM相比,容器可以在几秒钟内启动和停止,因为它们具有轻质结构。这使得在服务器中快速部署Docker容器变得更加容易。
    另一方面,VM是具有自己的OS的隔离服务器实例。它们不能跨多个平台移植而不会引发兼容性问题。
    对于必须在不同平台上开发和测试应用程序的开发目的,Docker容器因此是理想的选择。

    性能

    Docker和虚拟机用于不同的目的,因此同等地衡量它们的性能是不公平的。但是它们的轻量级架构使得Docker容器比虚拟机的资源密集程度更低。
    因此,与VM相比,容器可以非常快地启动,因为后者必须加载整个OS才能启动。资源使用情况也因两者而异。
    在容器中,CPU,内存,I / O等资源使用情况因负载或流量而异。与VM的情况不同,不需要永久地将资源分配给容器。
    与VM相比,扩展和复制容器也是一项简单的任务,因为不需要在其中安装操作系统。

  • 相关阅读:
    ArrayList和LinkedList的区别
    线程的基本概念、线程的基本状态以及状态之间的关 系
    当一个线程进入一个对象的一个synchronized方法后, 其它线程是否可进入此对象的其它方法?
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.thinkplatform.dao.UserLogDao' available: expected at least 1 bean which qualifies as autowi
    IDEA设置热部署
    spring的核心组件及作用(一)
    解决Linux启动redis时出现提示权限不够问题
    Struts自动装配和四种放入Session作用域的方式
    Struts第一个案例搭建
    当List<String> list =new ArrayList<String>(20); 他会扩容多少次
  • 原文地址:https://www.cnblogs.com/vinic-xxm/p/11383634.html
Copyright © 2020-2023  润新知