Docker vs VM

news/发布时间2024/5/14 10:35:58

在这里插入图片描述
关于应用程序的托管和开发,市场中的技术和产品琳琅满目。对比 Docker 和 VM,如何取舍?这主要由自身团队的因素决定,在选择 Docker 的情况下,你需要保证程序可在容器和虚拟机中运行。另外,成本和易用性也是重要考虑因素。

云和混合云自动化为编写和部署代码创造了新的工作流。容器技术与其他先进技术结合,可以有效减少对 Ops 基础设施的依赖。我们将从这些角度出发,对比 Docker 和 VM 的优劣。

虚拟程序托管

在日常软件开发中,我们使用的很多产品都离不开虚拟化技术。借助各种类型的 hypervisor(虚拟机管理器)解决方案,公司能够利用资源池来创建机器,而这些机器以往通常都是单独的硬件设备。VM 结合机器镜像与底层自动化,提供了一种快速可靠的机器创建方式。

用户可以充分利用现有的硬件资源,创建本地云环境所需的资源池。如今,许多生产系统都使用 VM 来处理关键程序。使用虚拟化机器,将可靠的基础设施与更现代化、更集中的管理相结合。

这类基础设施集群更像是裸机操作。每个虚拟机都是自己的实体,可以通过虚拟网络和存储进行分块。在使用 VMware 的情况下,vSphere支持自动化,我们因此能够从脚本或第三方编排软件的接口,创建动态机器。这是团队使用VM和Docker的原因之一。

最近,容器和编排工具备受关注,比如 Kubernetes(点击链接,关于 Docker和 Kubernetes 的博客)。那些已经在VMware 环境中使用 VM 的公司,现在可以采用混合方式。这意味着他们不仅支持 VM,还支持 Docker 和 Kubernetes 等容器技术。

Docker快速入门

在这里插入图片描述
Docker 类似于虚拟机,代表了一个完整的机器镜像,包括从运行到公开的所有服务。这种方法借助了 VM 托管的概念,并进一步扩展,让管理范围更大,灵活性更高。因此,使用容器化方法进行软件开发的好处不胜枚举。

使用 Docker开发程序,可以更真实地展现在生产中运行的内容。这种真实性源于 Docker 镜像的设计、构建和部署。开发人员可为程序所处的环境确定方向。这种方式,让开发人员拥有了更自由的创作环境,而这种创作自由在使用VM 镜像时往往比较有限。

自动化是 Docker 备受推崇的另一个关键原因。Dockerfile 中的说明可以指导我们安装基本操作系统、必备软件和修补程序。开发人员可灵活使用 Docker 镜像,随时访问一个新的本地环境,更改测试。这种方法减少了类似于“在我机器上运行得好好的!(Works on my machine!)”等跨机器兼容问题。

容器化应用程序模型的优势很多,除了突出的标准化、自动化之外,还能用更少的资源运行更多的功能。什么意思呢?虚拟机通常只适用于大环境中的一部分程序。对比之下,Docker 可以在应用层进行抽象。

每个进程都在自我保护中执行,因此多个程序可同时使用底层 Docker 镜像,同时,安全性也得到了维护。显然,这为实现更高效的开发工作流奠定了基础。另外,团队也更容易采用编排工具进一步扩展构建容器,让性能更为强大。

那些在微软 Azure 等云环境下工作的人,也青睐现成的容器服务基础设施。在多个环境中灵活运行最终 Docker 镜像,DevOps 工程师的配置和部署更为简洁。随着容器化的发展,这种方法正迅速成为常态。

Docker vs VM —— 从竞争到互补

在这里插入图片描述
虽然 Docker 和 VM 的使用方式有不少相似之处,但如何才能将之结合,让高效运作时间与资源利用效率实现新的突破?借助各种编排和自动化方法,Docker 镜像和虚拟机可以协同工作,创建更为稳定的服务,同时占用更少的基础设施。

例如,应用程序可以使用 MS SQL 作为数据层。由于 MS SQL 在 VM 上执行得更好(对比 Docker),因此我们可以创建一个虚拟机,并进行适当的设置和安全性配置。在这个服务器旁边是一个 Docker 主机,运行装有程序的容器。这种混合方法减轻了每个应用程序使用 VM 的需求,并能帮助优化资源。

另一个例子是 Docker 容器与虚拟化软件(如 VMware)的集成。如前所述,VMware vSphere 可支持容器,其中包括对 Kubernetes 集群的支持。集成之后,一个简单的 Docker 应用程序就具备了一种新的能力,可以进行扩展、监视和自我修复。

Docker vs VM 的区别

在这里插入图片描述

何时使用 Docker 和 VM?

毋庸置疑,对大部分程序的基础设施来说,这两种方案都是随时可用的。是否采用 Docker 或 VM 运行服务,取决对涉及的体系结构、所需的正常运行时间和安全要求的全面考量。两者各具优劣,我们也可以取长补短。

以一个简单的程序为例,其唯一任务是显示地理位置的当前日期、时间和温度。通过以上资料,我们可以确定在生产环境中运行服务的最佳基础设施。以下是有关应用程序的一些信息:

  • 应用程序在 Node.js 中创建。
  • 无需登录安全保障。
  • 运行时间并不重要,因为这是一个虚拟程序。
  • 无需将程序日志的数据持久化设置为警告级别。

根据以上信息,我们可以确定以下几点:

1.由于应用程序在 Node.js 创建,因此已预安装了符合基本要求的 Docker 镜像。构建应用程序需要将文件添加到镜像的程序目录中。

2.系统和外部 API 提供数据和温度信息。应该添加调用外部 API 的记录。

3.资源使用率和流量较低,因此不需要集群环境。

在这类简单的网络服务中,没有必要使用虚拟机这样的成熟环境。因此,我们可以创建一个简单的 Docker 镜像,并用构建的应用程序文件进行填充。可移植的容器,在匹配的 Docker 的主机上运行,使用容器加速工作流的优势也得以充分发挥。

相反,另一个应用程序示例涉及处理加密货币金融交易的网络服务。同样,我们先检查了简单的虚拟服务,然后更详细地研究此程序:

  • 应用程序通过 .NET Core 运行。
  • 检查活跃的登录活动。
  • 正常运行时间必须尽可能接近100%,不包括维护时间。
  • 数据通过连接到 MS SQL 数据库而持久存在。

与之前一样,我们可以从掌握的信息中整理出一些关键的细节:

  1. 可以使用 Docker 基础镜像为应用程序提供服务,该镜像可生成结果,并将结果发布到容器内的应用程序层。
  2. 即使通过程序扩展,容器也必须保持会话。
  3. 需要使用编排工具(如 Kubernetes)来进行内部监测,并能够在卡住状态下重新创建容器。
  4. Docker 主机应与 MS SQL 虚拟机位于同一 VLAN 上,保证数据安全传输。

在这一点上,混合方式更加有效。如前所述,MS SQL 最好在虚拟机这样的基础设施上运行,以便有效地配置、监控。编排工具也能加入,保证数据持久、安全。比如 Kubernetes 的监控和自我修复等功能,可让集群以正确的方式启动程序,并持续运转。

在某些情况下,“容器化”应用程序并不可行,虚拟机更胜一筹。但是,通过将现有裸机的基础设施转换为虚拟化基础设施,仍然可以快速制胜。更多的资源释放出来,用于虚拟化的额外计算、内存和存储任务。

总结

很多情况下,遗留系统处理和新程序开发青睐 Docker。每种方式各有所长,学会取长补短才是制胜的关键。不过,无论在哪种情况下,虚拟化都是开发、管理程序的有效工具。

无论你是开发一个简单的日期/时间程序,还是每分钟需要处理上千个任务,都有合适的产品和技术协助你,提高服务水平和稳定性。了解每种技术,花点时间研究不同程序是如何在这两种技术中运行的。最好的方法,是进行真正的性能比较,这样才能做出正确决策。

Incredibuild 解读

在讨论 Docker 与 VM 时,我们也可以从 Incredibuild 的角度分析。

如今,VM 和容器不仅用于生产,更是成熟 CI/CD 管道中的一部分。当 VM或容器用作构建服务器来运行 CI/CD 时,Incredibuild 可以将之转换为超级容器,包含数百个内核资源。这些内核可以全面加速构建、测试和其他计算密集型进程,点击链接,免费试用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/FYKK/3561.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析:总体流程:1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到…

ChatGPT 是什么

文章目录 一、ChatGPT 是什么二、ChatGPT的发明者三、ChatGPT的运作方式四、ChatGPT的技术五、ChatGPT的优势六、ChatGPT的局限性七、ChatGPT的应用八、ChatGPT的未来九、总结 一、ChatGPT 是什么 OpenAI的ChatGPT,即Chat Generative Pre-Trained Transformer&…

[算法沉淀记录] 排序算法 —— 归并排序

排序算法 —— 归并排序 算法介绍 归并排序是一种分治算法,由约翰冯诺伊曼在1945年发明。它的工作原理是将未排序的列表划分为n个子列表,每个子列表包含一个元素(包含一个元素的列表被认为是有序的),然后重复合并子列表以生成新的有序子列表…

C#实用开发(14)--高清晰度字体和窗体分辨率问题。

新建winform程序是,又是会感觉到字体清晰度不够高。还有一种现象就是分辨率的问题,我们平常在自己的电脑开发是用125百分比的分辨率,实际部署的工控机是100,这就会导致分辨率不一致的问题。 可以通过新建应用程序清单,…

jetson nano——安装archiconda

目录 1.archiconda3我在这提供了下载链接,点解下面链接即可1.看好文件所在位置,如果装错了,那么环境变量的路径自己进行相应的修改。2.添加环境变量 2.可能部分伙伴输入一些激活,啥的命令激活不了,那么输入下面这些代码…

Redis实现滑动窗口限流

常见限流算法 固定窗口算法 在固定的时间窗口下进行计数,达到阈值就拒绝请求。固定窗口如果在窗口开始就打满阈值,窗口后半部分进入的请求都会拒绝。 滑动窗口算法 在固定窗口的基础上,窗口会随着时间向前推移,可以在时间内平滑控…

ClickHouse 指南(三)最佳实践 -- 稀疏主索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中,我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…

潇洒郎:2024 IDEA、Pycharm获取最新激活码获取方式

IDEA获取最新激活码 https://idea.javatiku.cn/ 手机打开,看到验证码,30分钟有效,输入验证码 获取到最新激活码

【C++私房菜】面向对象中的多重继承以及菱形继承

文章目录 一、多重继承1、多重继承概念2、派生类构造函数和析构函数 二、菱形继承和虚继承2、虚继承后的构造函数和析构函数 三、has-a 与 is-a 一、多重继承 1、多重继承概念 **多重继承(multiple inheritance)**是指从多个直接基类中产生派生类的能力…

Jmeter基础(2) 目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前,需要先对工具的目录有些了解,也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

基于Mapbox展示GDAL处理的3D行政区划展示实践

目录 前言 一、Gdal数据处理 1、数据展示 2、Java数据转换 二、Mapbox可视化 1、定义Mapbox地图 2、地图初始化 3、创建地图 三、界面优化 1、区域颜色设置 2、高度自适应和边界区分 3、中文标注 总结 前言 最近有遇到一个需求,用户想在地图上把行政区划…

十、线性代数二-线性相关

目录 1、线性相关的概念: 2、线性相关的代数表示: 3、线性相关的判断方法: 理解:线性相关指的是 向量组(α1,α2,α3,...)的 秩是 小于 k 的元数的,即齐次…

多任务爬虫(多线程和多进程)

在一台计算机中,我们可以同时打开多个软件,例如同时浏览网页、听音乐、打字等,这是再正常不过的事情。但仔细想想,为什么计算机可以同时运行这么多软件呢? 这就涉及计算机中的两个名词:多进程和多线程。 同样&#xf…

【Python笔记-设计模式】外观模式

一、说明 外观模式是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个统一的接口。 (一) 解决问题 简化复杂系统的接口调用 (二) 使用场景 简化复杂系统:需要一个指向复杂子系统的直接接口, 且该接口的功能有限时重构复杂的代码…

15-36V降压充电光伏MPPT充电方案

1.MPPT原理--简介 MPPT,全称为Maximum Power Point Tracking,即最大功点跟踪,它是一种通过调节电气模块的工作状态,使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中,可有效地…

[极客挑战2019]HTTP

这道题考察的是http请求头字段的含义和使用; 具体如下 Referer:来源地址 User-Agent:客户端配置信息:浏览器类型、版本、系统类型等 X-Forwarded-For:代理地址,即数据发出的地址 开始解题:(对我这初学者真的烧脑&a…

操作系统导论-课后作业-ch19

1. 本书在第6章中有过介绍,gettimeofday函数最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差,循环次数太多也会导致结束时间小于开始时间(即回滚)的现象&#xff…

计算机网络面经_体系结构一文说清

编辑:平平无奇的羊 目录 基础 1. 计算机网络结构体系 三种模型之间的区别: 如何背诵: 进阶 OSI七层模型: TCP/IP四层模型: TCP/IP五层模型 总结 字节实习生为大家带来的是计算机网络面经系列博文,由浅…

Spring基础之AOP和代理模式

文章目录 理解AOPAOP的实现原理 AOP代理模式静态代理动态代理1-JDK动态代理2-CGLIB动态代理 总结 理解AOP OOP - - Object Oriented Programming 面向对象编程 AOP - - Aspect Oriented Programming 面向切面编程 AOP是Spring提供的关键特性之一。AOP即面向切面编程&#xff0…

数据结构之平衡二叉搜索树

什么是平衡二叉树 AVL是一种自平衡二叉搜索树(self-balancing binary search tree)的数据结构,它的名称来源于其发明者G.M. Adelson-Velsky和E.M. Landis。AVL树通过在每次插入或删除节点时进行旋转操作,来确保树的高度始终保持在…
推荐文章