Docker vs VM

在这里插入图片描述
关于应用程序的托管和开发,市场中的技术和产品琳琅满目。对比 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.rhkb.cn/news/263017.html

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

相关文章

ArcgisForJS如何在线编辑ArcGIS Server发布的几何要素?

文章目录 0.引言1.ArcGIS创建几何要素2.ArcGIS Server发布几何要素3.ArcgisForJS在线编辑ArcGIS Server发布的几何要素 0.引言 ArcGIS For JS 是一种用于创建和编辑地理信息的 JavaScript 库,它允许用户在线编辑 ArcGIS Server 发布的几何要素。本文从ArcGIS创建几…

P8630 [蓝桥杯 2015 国 B] 密文搜索

P8630 [蓝桥杯 2015 国 B] 密文搜索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 题目分析 基本上是hash的板子,但实际上对于密码串,只要判断主串中任意连续的八个位置是否存在密码串即可;那么我们…

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频,说到:当程序正在运算时,会有一个较长时间的空白期,谁也不知道程序运行的进度如何,不如给他加个进度条。 于是我今个就搜寻一下,Python版的进度条都可以怎么写! 送书…

PNPM 批量检查和更新项目依赖

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

国家建筑装配式内装产业基地在沪成立,副主任单位优积科技协同助推绿色低碳循环发展

上海市室内装饰行业协会装配式内装产业专业委员会成立大会暨“国家建筑装配式内装产业基地”项目启动会于3月21日下午1点在上海光大酒店隆重举行。出席此次活动的包括市装协会长徐国俭,市装协党支部书记兼秘书长丛国梁,市装协装配式内装委主任顾泰昌&…

热点参数流控(Sentinel)

热点参数流控 热点流控 资源必须使用注解 @SentinelResource编写接口 以及 热点参数流控处理器 /*** 热点流控 必须使用注解 @SentinelResource* @param id* @return*/ @RequestMapping("/getById/{id}") @SentinelResource(value = "getById", blockHand…

华清远见嵌入式学习——驱动开发——day9

目录 作业要求: 作业答案: 代码效果: ​编辑 Platform总线驱动代码: 应用程序代码: 设备树配置: 作业要求: 通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试&…

转运机器人,AGV底盘小车:打造高效、精准的汽车电子生产线

为了满足日益增长的市场需求,保持行业领先地位,某汽车行业电子产品企业引入富唯智能AMR智能搬运机器人及其智能物流解决方案,采用自动化运输措施优化生产节拍和搬运效率,企业生产效率得到显著提升。 项目背景: 1、工厂…

C++中的STL数据结构

内容来自:代码随想录:哈希表理论基础 1.常见的三种哈希结构 当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构 数组 set (集合) map(映射) 在C中,set 和 map 分别提供以下三种数据结构…

HTTPS(超文本传输安全协议)被恶意请求该如何处理。

HTTPS(超文本传输安全协议)端口攻击通常是指SSL握手中的一些攻击方式,比如SSL握手协商过程中的暴力破解、中间人攻击和SSL剥离攻击等。 攻击原理 攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息&#xf…

什么是SSD型云服务器?

​  SSD云服务器是一种使用固态硬盘代替传统HDD进行存储的虚拟机。SDD 使用闪存单元来存储数据,与云计算技术相结合,形成强大且高效的存储解决方案,可以随时随地访问。 SSD云服务器如何工作? SSD云服务器是利用虚拟化和云计算技术创建的。…

ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

在使用ElementUI table表格组件时有时需要双击单元格显示编辑状态,失去焦点时还原表格显示。 实现思路: 在数据中增加isFocus:false.控制是否显示在table中用cell-dblclick双击方法 先看效果: 上源码:在表格模板中用scope.row…

最新Unity游戏主程进阶学习大纲(2个月)

过完年了,很多同学开始重新规划自己的职业方向,找更好的机会,准备升职或加薪。今天给那些工作了1~5年的开发者梳理”游戏开发客户端主程”的学习大纲,帮助大家做好面试准备。适合Unity客户端开发者。进阶主程其实就是从固定的几个方面搭建好完整的知识体…

python编程中模块的调用方法

模块,就是制造大型程序的“零件"。这些零件可以是外购的也可以是“自造”的。它们的使用方法很简单,就是“拿来”——import. “拿来”模块的方法有from***import*** 和import***,宗旨就是“拿来”——import. 对不对?

Vision Transfomer系列第二节---Tricks测试

目录 学习式和固定式位置编码测试dropout的作用测试block深度的作用测试embeding维度大小的作用测试多头的作用测试Overlap Patch的作用 学习式和固定式位置编码测试 主要测试无位置编码\可学习位置编码和固定式位置编码的训练效果: 其中固定式位置编码采用之前博客的正余弦位…

架构设计:数据库扩展

引言 随着业务的发展和用户规模的增长,数据库往往会面临着存储容量不足、性能瓶颈等问题。为了解决这些问题,数据库扩展成为了一种常见的解决方案。在数据库扩展的实践中,有许多不同的策略和技术可供选择,其中包括水平拆分、垂直…

高通 Android 12 Settings不显示版本号问题

1、最近项目遇到一个奇葩问题,编译系统版本号不见了? 2、一开始我想着可能是自己代码没有make clean结果编译几个小时,然后烧录固件发现还是未生效。 3、然后这时候我又去看git log review最近修改也没有太大发现(待定&#xff…

介绍 CI / CD

目录 一、介绍 CI / CD 1、为什么要 CI / CD 方法简介 1、持续集成 2、持续交付 3、持续部署 2、GitLab CI / CD简介 3、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 GitLab CI / CD 6、GitLab CI / CD功能集 一、介绍 CI / CD 在本文档中&#x…

开源 - 一款可自定义的在线免杀平台|过x60、wd等

免责声明:本工具仅供安全研究和教学目的使用,用户须自行承担因使用该工具而引起的一切法律及相关责任。作者概不对任何法律责任承担责任,且保留随时中止、修改或终止本工具的权利。使用者应当遵循当地法律法规,并理解并同意本声明…

K线实战分析系列之二:伞形线

K线实战分析系列之二:伞形线 一、伞形线二、锤子线三、上吊线四、锤子线和上吊线的特征 一、伞形线 可以是看涨信号,也可以是看跌信号,具体要看它处于趋势的哪个位置 二、锤子线 出现在下行趋势中就叫锤子线锤子线是阳线看涨意义更大一点市…