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 可以将之转换为超级容器,包含数百个内核资源。这些内核可以全面加速构建、测试和其他计算密集型进程,点击链接,免费试用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端跨域问题解决,本地代理到域名

1.学习黑马uniapp时遇见的问题: 报跨域错误 但是已经设置了代理,仍然无效。 2.解决(多次遇见此问题,特此记录): 最后发现是这里少写了/api,遇见以api开头的接口,则把这些接口转发到target所指向…

32单片机基础:GPIO输出

目录 简介: GPIO输出的八种模式 STM32的GPIO工作方式 GPIO支持4种输入模式: GPIO支持4种输出模式: 浮空输入模式 上拉输入模式 下拉输入模式 模拟输入模式: 开漏输出模式:(PMOS无效,就…

详细分析Python中的Pyautogui库(附Demo)

目录 前言1. 基本知识2. 常用方法2.1 通用方法2.2 鼠标操作2.3 消息窗口2.4 截图 前言 该博客主要以入门了解其函数为主,灵活运用,后续会出一些实战结合类! 1. 基本知识 PyAutoGUI 是 Python 的一个库,用于实现自动化的图形用户…

信号系统之连续信号处理

1 Delta 函数 连续信号可以分解为缩放和移位的增量函数,就像处理离散信号一样。不同之处在于,连续 delta 函数比其离散函数复杂得多,在数学上也抽象得多。我们不是用它是什么来定义连续 delta 函数,而是用它所具有的特征来定义它…

【眼科大模型】Ophtha-LLaMA2:视觉模型提取图像特征 + LLM基于特征生成眼底病变的诊断报告

Ophtha-LLaMA2:视觉模型提取图像特征 LLM基于特征生成眼底病变的诊断报告 提出背景设计思路选择大模型基座生成诊断报告 论文:https://arxiv.org/pdf/2312.04906.pdf 提出背景 目标是开发一个全面的眼科模型,可以根据不同仪器的检查报告准确…

GitHub | 在 GitHub 上在线展示 Vue 项目

简洁版&#xff1a;上传所有代码 << 构建项目并上传 dist 目录 << 设置仓库 << 访问 Step1&#xff1a;在 GitHub 上新建仓库&#xff0c;并将 Vue 项目的代码 push 到该仓库中。坑点在于&#xff0c;如果你是从 GitHub 上 clone 的别人的项目&#xff0c;那…

vulnhub练习 DC-1复现及分析

一、搭建环境 1.工具 靶机&#xff1a;DC-1 192.168.200.17 攻击机&#xff1a;kali 192.168.200.13 2.注意 攻击机和靶机的网络连接方式要相同&#xff0c;另外DC-1的网络连接方式我这里采用NAT模式&#xff0c;是与kali的网络连接模式相同的&#xff08;当然亦可以选用桥…

国产chat gpt推荐

下述网站响应非常快 会持续更新的! 付费&#xff1a; 小名言 免费&#xff1a; AIchatOS 百度的文心一言

unity学习(32)——跳转到角色选择界面(父子类问题)

新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单&#xff0c;把ResceneScript也绑到canvas上就可以了 。 此时&#xff0c;在账号密码正确的情况下&#xff0c;是可以完成场景切换。 对应的代码如下&#xff1a; TMP_Text d GameObject.FindWithTag(&…

板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第五节 Cookie对象全解 一、什么是CookieCookie的源码 二、Cookie的具体操作&#xff08;1&#xff09;创建Cookie&#xff08;2&#xff09;获取Cookie&#xff08;3&#xff09;设置Cookie的到期时间&#xff08;4&#xff09;设置Cookie的路径…

<网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》

1 SQL注入漏洞利用及防范 1 SQL注入的地位 2 SQL注入的危害及本质 这些危害包括但不局限于&#xff1a; 数据库信息泄漏&#xff1a;数据库中存放的用户的隐私信息的泄露。网页篡改&#xff1a;通过操作数据库对特定网页进行篡改。网站被挂马&#xff0c;传播恶意软件&#…

writing classes ... [xxx of xxxx] 执行时间太长

一、问题展示 二、解决方法 打开设置【File - Settings…】修改堆大小

OpenGL学习——16.多光源

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

MySQL 窗口函数温故知新

本文用于复习数据库窗口函数&#xff0c;希望能够温故知新&#xff0c;也希望读到这篇文章的有所收获。 本文以&#xff1a;MySQL为例 参考文档&#xff1a; https://www.begtut.com/mysql/mysql-window-functions.html 使用的样例数据&#xff1a;https://www.begtut.com/m…

Linux|centos7| rust语言的编译开发环境快速部署

前言&#xff1a; rust语言是干什么的&#xff0c;怎么用这些我就不在这里废话了&#xff0c;免得浪费大家的时间&#xff0c;我目前只知道rust音译为铁锈&#xff0c;它的可执行主程序叫cargo&#xff0c;音译为货物 这个语言和python&#xff0c;Java&#xff0c;go等等语言…

每日学习总结20240220

每日总结 20240220 岁月极美&#xff0c;在于它必然的流逝&#xff1b;春花&#xff0c;秋月&#xff0c;夏日&#xff0c;冬雪。 ——三毛 1.svn操作 通过svn创建一个仓库 请写出一套配置 配置文件包括svnserve.conf passwd authz 三个文件 添加用户xiaoming 密码为lx,使得能…

LabVIEW读取excel日期

LabVIEW读取excel日期 | Excel数据表格中有日期列和时间列&#xff0c;如下表所示&#xff1a; 通过LabVIEW直接读取Excel表格数据&#xff0c;读出的日期列和时间列数据与原始表格不一致&#xff0c;直接读出来的数据如下表所示&#xff1a; 日期、时间列数据异常 问题产生原因…

三次握手,四次挥手的大白话版本

三握四挥 首先我们要知道握手和挥手是在做什么&#xff0c;握手是为了让客户端和服务端建立连接&#xff0c;挥手是为了让客户端和服务端断开连接&#xff0c;握手时客户端主动发起请求&#xff0c;挥手双方都能发起请求。 三次握手 有必要解释一下&#xff0c;SYN的意思是同…

OLED示例程序、keil的调试模式

调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试&#xff1a;直接将显示屏连接到单片机&#xff0c;将调试信息打印在显示屏上 Keil调试模式&#xff1a;借助Keil软件的调试模式&#xf…

Vue模版语法之属性绑定v-bind

双大括号不能在 HTML 属性中使用。想要响应式地绑定一个属性&#xff0c;应该使用 v-bind 指令 1. 使用v-bind绑定属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>新建页面</title><sc…