首页 > 其他分享 >在Docker中,Docker和虚拟机有什么不同?

在Docker中,Docker和虚拟机有什么不同?

时间:2024-03-06 17:46:01浏览次数:23  
标签:容器 隔离 不同 虚拟机 宿主机 内核 Docker

在Docker中,与传统虚拟机(Virtual Machines, VMs)相比,Docker采用的是操作系统层面的轻量级虚拟化技术,主要体现在以下几个方面的不同:

  1. 架构和资源使用

    • 虚拟机:运行在hypervisor之上,每个虚拟机都包含一个完整的操作系统副本(内核+用户空间),占用较多的系统资源,如CPU、内存、磁盘空间等。
    • Docker容器:基于宿主机的操作系统内核,通过namespace、cgroups等Linux内核功能实现资源隔离,容器之间共享主机的内核,因此资源占用较少,启动迅速,密度更高。
  2. 启动速度与性能

    • 虚拟机:启动时间较长,可能需要数分钟,因为它需要加载整个操作系统和相关服务。
    • Docker容器:启动时间极短,通常只需几秒钟,因为容器只需要启动必要的应用程序及其依赖,不需要初始化整个操作系统。
  3. 部署与可移植性

    • 虚拟机:每个虚拟机包含其自身的完整环境,部署时需考虑操作系统及各种库的兼容性,迁移成本较高。
    • Docker容器:通过Docker镜像提供一致的运行时环境,简化了部署过程,能够在任何支持Docker的平台上快速、一致地部署应用程序,增强了可移植性。
  4. 隔离性

    • 虚拟机:提供了强隔离性,每个虚拟机之间通过硬件辅助的虚拟化技术实现近乎完全的隔离,即使一个虚拟机受到攻击,其他虚拟机不会直接受到影响。
    • Docker容器:虽然提供了一定程度的隔离,但基于进程和用户空间的隔离机制不如虚拟机彻底。容器间的隔离依赖于内核提供的命名空间、控制组等功能,这意味着如果内核出现漏洞,可能导致容器间的安全边界被破坏。
  5. 安全性

    • 虚拟机:由于硬件级别的隔离,虚拟机的安全风险相对较低,即便一个虚拟机内部遭到入侵,一般情况下无法直接影响到宿主机或其他虚拟机。
    • Docker容器:容器内部的root权限在宿主机上也是root权限,如果恶意程序获取了容器内部的root权限,理论上有可能影响到宿主机或者其他容器。不过可以通过安全配置和安全策略来降低这类风险。
  6. 系统开销

    • 虚拟机:每个虚拟机都需要独立的内核,系统开销较大,尤其在大量并发的情况下,会导致资源浪费。
    • Docker容器:容器共享宿主机内核,避免了冗余内核开销,从而提高了服务器的利用率和整体效率。

综上所述,Docker容器相较于虚拟机更轻量、高效、灵活,适用于微服务架构、持续集成/持续部署(CI/CD)流水线以及开发测试环境,而虚拟机更适合于需要严格隔离、多样化操作系统支持或者对资源隔离有极高要求的应用场景。

标签:容器,隔离,不同,虚拟机,宿主机,内核,Docker
From: https://www.cnblogs.com/huangjiabobk/p/18057167

相关文章

  • 在Docker中,Docker容器有几种状态?
    在Docker中,容器可以从一种状态转换到另一种状态,以下是Docker容器可能出现的主要状态:created(已创建):当您使用dockercreate命令创建一个容器但尚未启动它时,容器处于此状态。容器的文件系统结构和配置已经准备完毕,但是还没有开始运行任何进程。restarting(重启中):此状态表明......
  • docker概述
    1.Docker组件Docker客户端:ClientDocker服务器:DockerdaemonDocker镜像:ImageRegistryDocker容器:ContainerDocker采用的是Client/Server架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通......
  • 在Docker中,Docker可以用来做什么?
    Docker作为一种开源的应用容器引擎,主要用于解决应用软件开发、分发和部署过程中面临的环境一致性、可移植性和资源高效利用等问题。以下是一些Docker的主要用途:标准化和隔离应用环境:Docker通过容器技术为每个应用程序及其依赖提供一个独立的、可移植的运行环境。每个容器就像......
  • Mysql和Oracle在order by上关于聚合函数一些不同的差异
    1.问题SELECTp.PDTNO,p.PDTNAME,sum(a.QUANTITY)ASapplySumCountFROMPRODUCTpJOINAPPLYaONp.PDTNO=a.PDTNOGROUPBYPDTNOORDERBYapplySumCountDESC;在Mysql中我们经常将select中聚合函数得到的结果起别名用于orderby但是同样的方式在Oracle中就不行,......
  • docker构建arm编译环境
    利用docker快速搭建arm环境进行源码编译及代码测试准备安装好docker环境。启动multiarch/qemu-user-static跨平台模拟窗口sudodockerrun--rm--privilegedmultiarch/qemu-user-static--reset-pyes编写Dockerfile构建arm镜像#第一阶段:准备编译环境和源码#......
  • ansible dockerfile
    包括了docker相关的模块功能dockerfileFROMpython:3.12.2-alpine3.19#ENVANSIBLE_VER=2.16.4RUNset-x\#Builddependencies&&apk--no-cacheadd--virtualbuild-dependencies\gcc\musl-dev\python3-dev\......
  • Docker启动单机elasticsearch生产配置
    宿主机目录挂载在docker容器中运行elasticsearch时,需要进行配置、插件、日志和数据文件的挂载。创建挂载文件切换es用户sues01创建es本地目录cd/data&&mkdires_node1在es_node1下面创建配置、日志、数据目录cd/data/es_node1&&mkdirlogsdataconfigplugins基......
  • docker----镜像(二)
    镜像查看查看镜像[root@hmm-docker~]#dockerimagesREPOSITORY#镜像仓库TAG#标签IMAGEID#镜像idCREATED#创建时间SIZE#大小my-hellolatest6d0c09473a6620hoursago861kBubuntulatest3db8720ecbf53weeksago......
  • docker启动gitlab 备份与恢复
    一、数据备份进入容器备份dockerexec-itgitlab/bin/bashgitlab-rakegitlab:backup:create或者一条命令dockerexecgitlabgitlab-rakegitlab:backup:create默认将备份文件保存至/var/opt/gitlab/backups/这条命令是在Docker容器内部执行GitLab的备份操作。......
  • .NETCore文件上传将文件保存到docker容器以外的文件夹
    最近在开发一个文件服务,用于公司内容各应用的文件保存和查询获取。开发环境:windows10+.NETCore7.0+Mysql  发布环境:Liunx+Docker实现功能:文件服务提供接口上传文件和下载文件,服务用于内网访问。实现中遇到的问题:由于文件保存是用的系统自带文件服务。而部署环境是Liunx+Doc......