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.mzph.cn/news/691472.shtml

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

相关文章

C/C++ MACOS、Windows、Linux、HarmonyOS 平台宏判断

本文提供经过三个平台一份代码编译无故障 C/C 工程移植通过&#xff0c;所以无需担心宏在这些平台上面无法使用。 #include <stdio.h> #include <stddef.h>#if !defined(NULL) #define NULL 0 #endif#if defined(_DEBUG) #if !defined(DEBUG) #define DEBUG 1 #end…

【视频编解码】M-JPEG压缩、H.264压缩 对比

简介 参考这篇文章&#xff1a;https://blog.csdn.net/qq_41248872/article/details/83590337 写的比较好&#xff0c;这里就不赘述了。 我们在视频传输的时候&#xff0c;需要压缩&#xff0c;常见的压缩包括: jpeg 压缩h264 压缩 当然使用最多的还是 264, 毕竟他的压缩比…

第二件事 在Java 虚拟机 (JVM)跑一个程序

上篇文章写了 在 WINDOWS上 创建了一个 JVM&#xff0c; 好&#xff01; 现在在这个 Java 虚拟计算机系统上跑一个Java语言编写的小程序&#xff1b; 题目&#xff1a; 用Java语言 编写一个小程序 在Console界面 打印 整数 1-10 (回头了一下源程序&#xff0c;靠&#xff0c;应…

vue3中,ref()、reactive()、computed()、watch() 和 watchEffect()的区别

ref()、reactive()、computed()、watch() 和 watchEffect() 是 Vue 3 中常用的响应式处理函数&#xff0c;它们的主要区别如下&#xff1a; ref()&#xff1a;ref() 函数用于将一个普通的 JavaScript 值转化为响应式对象。它返回一个具有 value 属性的对象&#xff0c;我们可以…

【力扣每日一题】力扣105从前序与中序遍历序列构造二叉树

题目来源 力扣105从前序与中序遍历序列构造二叉树 题目概述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 思路分析 前序遍历的顺序是&#x…

用windbg调试uefi在hyper-v

添加环境变量 CLANG_BINC:\Program Files\NASM\ NASM_PREFIXC:\Program Files\NASM\ 添加path C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify 修改edk2-master\Conf\target.txt TARGET_ARCH X64 编译这两个包 #ACTIVE_PLATFORM EmulatorPkg/…

代码随想录算法训练营(回溯5)| 491.递增子序列 46.全排列 47.全排列 II

491.递增子序列 本题和大家刚做过的 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 题目链接/文章讲解 视频讲解 46.全排列 本题重点感受一下&#xff0c;排列问题 与 组合问题&#xff0c;组合总和&#xff0c;子集问题的区别。 为什么排列问题不用…

算法沉淀——BFS 解决拓扑排序(leetcode真题剖析)

算法沉淀——BFS 解决拓扑排序 01.课程表02.课程表 II03.火星词典 Breadth-First Search (BFS) 在拓扑排序中的应用主要是用来解决有向无环图&#xff08;DAG&#xff09;的拓扑排序问题。拓扑排序是对有向图中所有节点的一种线性排序&#xff0c;使得对于每一条有向边 (u, v)&…

Recorder 实现语音录制并上传到后端(兼容PC和移动端)

Recorder 首页&#xff1a;https://github.com/xiangyuecn/Recorder 一、安装 npm install recorder-core二、代码部分 1. HTML页面 <template><div><el-inputv-model"ttsText"type"textarea"placeholder"请输入内容"><…

外汇天眼:进Goccfx投资群前还好好的,踢出群后本金都没了

在外汇诈骗中&#xff0c;许多骗局都是以“拉群荐股”的方式&#xff0c;将一个个无辜的外汇投资者拽入虚假的外汇平台&#xff0c;投资者一旦进群&#xff0c;结果往往是被反向喊单而爆仓亏损。还有更过分的&#xff0c;就是诈骗分子利用投资者急于挽回损失的心理&#xff0c;…

YOLOv8-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、TensorFlow模块&#xff0c;除此…

前端|Day3:CSS基础(黑马笔记)

Day3:CSS基础 目录 Day3:CSS基础一、CSS初体验二、CSS引入方式三、选择器1.标签选择器2.类选择器3.id选择器4.通配符选择器 四、盒子尺寸和背景色五、文字控制属性1.字体大小2.字体样式&#xff08;是否倾斜&#xff09;3.行高单行文字垂直居中 4.字体族5.font复合属性6.文本缩…

【JAVA】《接口,抽象方法,抽象类 》之三 、抽象类详解

抽象类 详解 一、接口二、抽象方法三、抽象类3.1、抽象类的概念3.2、抽象类的特点&#xff1a;3.3、抽象类的作用&#xff1a;3.4、抽象类的应用&#xff1a;3.5、抽象类的注意事项&#xff1a; 一、接口 1.1、接口的概念 1.2、接口的作用&#xff1a; 1.3、接口应用&#xff…

自适应网站建站源码系统 带完整的安装代码包以及搭建教程

在当今数字化时代&#xff0c;拥有一个功能全面且能够适应不同设备的网站对于企业和个人来说至关重要。罗峰给大家分享一款全新的自适应网站建站源码系统&#xff0c;它不仅提供了完整的安装代码包&#xff0c;还附带了详细的搭建教程&#xff0c;帮助用户轻松构建出具有响应式…

Atcoder ABC340 C - Divide and Divide

Divide and Divide&#xff08;分而治之&#xff09; 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例…

Windows制作Ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在Windows10中制作Ubuntu22.04的U盘启动盘 一、下载Ubuntu22.04的iso文件 在浏览器中输入https://ubuntu.com去Ubuntu官网下载Ubuntu22.04的iso文件 二、下载Ultraiso 在浏览器中输入https://www.ultraiso.com进入ultraiso官网 点击FREE TRIAL&a…

编程笔记 html5cssjs 085 JavaScript 内置函数

编程笔记 html5&css&js 085 JavaScript 内置函数 一、内置函数二、内置对象三、函数和方法之间的区别 内置函数是JavaScript语言本身提供的&#xff0c;无需定义即可直接使用的函数。它们在全局作用域中可用&#xff0c;并且在处理常见任务时提供了便利。 一、内置函数…

com.alibaba.fastjson.JSONException: toJSON error的原因

问题&#xff1a; 导出接口报错&#xff0c;显示json格式化异常 发现问题&#xff1a; 第一个参数为HttpResponse,转换成json的时候报错 修改方法&#xff1a; 1.调换两个参数的位置 2.在aop判断里边 把ServletAPI过滤掉 Before("excudeWebController()")pub…

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​&#xff0c;求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n&#xff0c;表示数字个数。 第二行输入 n 个非负整数&#xff0c;表示 1,2…a1​,a2​…an​&#xff0c;以空格隔开。 …

【医学大模型 补全主诉】BioGPT + LSTM 自动补全医院紧急部门主诉

BioGPT LSTM 自动补全医院紧急部门主诉 问题&#xff1a;针对在紧急部门中自动补全主诉的问题子问题1: 提高主诉记录的准确性子问题2: 加快主诉记录的速度子问题3: 统一医疗术语的使用子问题4: 减少打字错误和误解子问题5: 提高非特定主诉的处理能力 解法数据预处理神经网络方…