首页 > 其他分享 >Docker与虚拟机有何不同?

Docker与虚拟机有何不同?

时间:2023-10-16 20:46:33浏览次数:31  
标签:容器 主机 虚拟机 有何 映像 Docker 运行

内容来自 DOC https://q.houxu6.top/?s=Docker与虚拟机有何不同?

我一直在反复阅读Docker文档,试图理解Docker和完整虚拟机之间的差异。它如何能够在不增加负担的情况下提供完整的文件系统、隔离的网络环境等?

为什么将软件部署到Docker镜像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?


Docker最初使用Linux容器(LXC),但后来切换到runC(以前称为libcontainer),它在与主机相同的操作系统上运行。这允许它共享许多主机操作系统资源。此外,它使用分层文件系统([AuFS](http://aufs.sourceforge.net/))并管理网络。

AuFS是分层文件系统,因此您可以拥有一个只读部分和一个写入部分,它们合并在一起。您可以将操作系统的公共部分设置为只读(并在所有容器之间共享),然后为每个容器分配自己的挂载以进行写入。

例如,如果您有一个1 GB的容器映像; 如果您想使用完整的VM,您需要将1 GB x数量的VMs。使用Docker和AuFS,您可以在所有这些容器之间共享大部分1 GB,并且即使有1000个容器,您仍然可能只有略超过1 GB的容器操作系统空间(假设它们都运行相同的OS映像)。

完整的虚拟化系统会为自己分配一组资源,并进行最少的共享。您获得更多的隔离,但这要重得多(需要更多的资源)。 Docker让您获得更少的隔离,但容器轻便(需要更少的资源)。因此,您可以在主机上轻松运行数千个容器,甚至都不会引起注意。尝试使用Xen做到这一点,除非您有一个非常大的主机,否则我认为这是不可能的。

完整的虚拟化系统通常需要几分钟才能启动,而Docker / LXC / runC容器只需要几秒钟,甚至有时不到一秒钟。

每种类型的虚拟化系统都有其优缺点。 如果您想要完全隔离且保证资源充足的完整虚拟机,那就是要走的路。 如果您只是想要将进程彼此隔离并在合理大小的主机上运行大量内容,那么Docker / LXC / runC似乎是要走的路。

有关更多信息,请查看这篇博客文章集合,它很好地解释了LXC是如何工作的(http://web.archive.org/web/20150326185901/http://blog.dotcloud.com/under-the-hood-linux-kernels-on-dotcloud-part )。

为什么将软件部署到docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?

部署一致的生产环境说起来容易做起来难。 即使您使用Chef和Puppet等工具,主机和环境之间的OS更新和其他更改也总是存在的。

Docker使您能够将操作系统快照为共享映像,并使其易于在其他Docker主机上进行部署。本地开发,QA,生产等:所有相同的映像。当然,您可以使用其他工具执行此操作,但不如简单或快速。

这对于测试非常有用; 假设您有数千个测试需要连接到数据库,并且每个测试都需要数据库的原始副本并对数据进行更改。传统的方法是在每次测试后重置数据库,可以使用自定义代码或Flyway之类的工具 - 这可能会非常耗时,意味着测试必须串行运行。但是,使用Docker,您可以创建数据库映像并运行每个测试一个实例,然后并行运行所有测试,因为它们都知道它们都将针对相同数据库快照运行。由于测试在Docker容器中并行运行并且在容器中运行,因此它们可以在同一台主机上同时运行并应该更快完成。尝试使用完整的VM做到这一点。
好的,让我解释一下。您从一个基础映像开始,然后进行更改,并使用docker提交这些更改,它会创建一个映像。此映像仅包含与基础映像的差异。当您想要运行映像时,还需要基础映像,它使用分层文件系统将映像堆叠在基础映像的上方:如上所述,Docker使用AuFS。AuFS将不同的层合并在一起,您就可以得到所需的结果;您只需要运行它即可。您可以继续添加越来越多的映像(层),它将继续只保存差异。由于Docker通常建立在注册表上的现成映像之上,因此您很少需要自己“快照”整个操作系统。

标签:容器,主机,虚拟机,有何,映像,Docker,运行
From: https://www.cnblogs.com/xiaomandujia/p/17768287.html

相关文章

  • 2023跟我一起学docker-swarm 教程:部署篇「上」
    2023跟我一起学docker-swarm教程:部署篇「上」Swarm模式是用于管理一组Docker守护程序的高级功能。ip规划:Manager:Manager:172.16.95.137Node1:172.16.95.138Node2:172.16.95.1391、manager节点初始化swarmdockerswarminit--advertise-addr172.16.95.137输出:dockerswar......
  • 2023跟我一起学docker-swarm 教程:部署篇「下」
    2023跟我一起学docker-swarm教程:部署篇「下」停止Swarm集群上的一个节点目前我们所有的节点都ACTIVE的状态运行的,master可以将任务分配给任何节点,所以所有的节点都可以接收到任务。很多时候我们需要维护应用的时候,您需要将节点设置为DRAIN可用性。DRAIN状态的节点Maser阻止此类......
  • docker 搭建nextcloud。实现个人网盘nextcloud
    想要docker启用高可用的Nextcloud网站,我们需要安装一下docker-compose安装docker-composewgethttps://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64-O/usr/local/bin/docker-compose下载完成,添加运行权限chmod+x/usr/local/bin/dock......
  • docker
    Docker的安装以ubuntu安装为例子1、如果安装过需要先卸载yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\......
  • linux学习记录(租云服务器及配docker环境) 10.16
    租到的服务器1、毛坯(1)框架(2)thrift2、服务(配好环境的服务器)(1)socket:比如数据库,获得一个IP地址+端口号访问(2)http:重中之重:把毛坯搭好,服务用现成的docker可迁移,且y总会给我们环境镜像,省掉配环境的过程 未来开发的主要工作环境在docker里面docker可配置ssh登录 ......
  • docker容器部署jenkins
    1.下载镜像dockerpulljenkins/jenkins2.创建用户和数据目录并授权useradd-u1000jenkins-M-s/sbin/nologinmkdir/data/jenkins/-pchown-Rjenkins:jenkins/data/jenkins/3.运行镜像dockerrun\--namejenkins\-p8080:8080-p50000:50000\--privilege......
  • SaaS模式相较传统CRM系统有何优势?
     SaaS模式的CRM客户管理系统相较于传统的CRM客户管理系统更加方便灵活,更加符合如今的市场环境。它解决了传统CRM系统投入大、维护难的难题,降低了中小企业导入CRM的门槛。下面详细说说SaaS模式相较传统CRM系统有何优势。 一、显著降低成本以前,企业部署一套CRM系统不仅要投入......
  • Docker一
    Docker架构镜像:一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器、一个镜像代表一个软件,如:mysql镜像、redis镜像、nginx镜像容器:(Container)容器是用镜像创建的运行实例,他可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的可以把容器看作是一个......
  • VMvare克隆虚拟机
    一目的vmVare克隆虚拟机吐槽:虚拟机里面配了一堆环境,直接克隆几份,改改配置,不用重复劳动了 二步骤1.右键-克隆 2.跟着引导走  3.这里选择完整克隆   4.完事儿   ......
  • 虚拟机配置静态ip
    一目的给虚拟机配置静态ip 二操作1.查看网关iprouteshow如下图,当前网关是192.168.65.2  2.配置静态ip2.1打开文件cat/etc/sysconfig/network-scripts/ifcfg-ens33vi/etc/sysconfig/network-scripts/ifcfg-ens332.2修改文件,注意使用静态ip,要确保该i......