Docker vs VM

news2024/10/7 16:18:38

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

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

相关文章

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数(zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3)&#xff0…

C语言字符串函数strcpy与strncpy

注意: 这两个函数的功能,都是将 src 中的字符串,复制到 dest 中。strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。strncpy() 有边界控制,最多复制 n1 个字符(其中最后一个是 ‘\0’ &…

百度RT-DETR :基于视觉变换器的实时物体检测器

概述 实时检测转换器 (RT-DETR) 由百度开发,是一种尖端的端到端物体检测器,可在保持高精度的同时提供实时性能。它利用视觉转换器(ViT)的强大功能,通过解耦尺度内交互和跨尺度融合,高效处理多尺度特征。RT…

ALBEF算法解读

ALBEF论文全名Align before Fuse: Vision and Language Representation Learning with Momentum Distillation,来自于Align before Fuse,作者团队为Salesforce Research。 论文地址:https://arxiv.org/pdf/2107.07651.pdf 论文代码&#xff1…

跑批SQL性能异常分析

跑批是串行进行的,同时伴随着在线业务,整个跑批过程中只卡在SQL(6hqva0h4awrxh)执行环节上,相关等待事件为gc current grant 2-way,其他环节及在线业务都不受影响,主机整体资源较为空闲。最后通…

dockerfile文件书写

1.dockerfile构建nginx镜像 1.1书写dockerfile文件 mkdir nginx #创建nginx目录 cd nginx vim dockerfile # 修改文件FROM centos # 基础镜像,默认最新的centos8操作系统 MAINTAINER xianchao # 指定镜像的作者信息 RUN rm -rf /etc/yum.repos.d/* # centos8默认…

HTTP的详细介绍

目录 一、HTTP 相关概念 二、HTTP请求访问的完整过程 1、 建立连接 2、 接收请求 3、 处理请求 3.1 常见的HTTP方法 3.2 GET和POST比较 4、访问资源 5、构建响应报文 6、发送响应报文 7、记录日志 三、HTTP安装组成 1、常见http 服务器程序 2、apache介绍和特点 …

基于机器学习的青藏高原高寒沼泽湿地蒸散发插补研究_王秀英_2022

基于机器学习的青藏高原高寒沼泽湿地蒸散发插补研究_王秀英_2022 摘要关键词 1 材料和方法1.1 研究区概况与数据来源1.2 研究方法 2 结果和分析2.1 蒸散发通量观测数据缺省状况2.2 蒸散发与气象因子的相关性分析2.3 不同气象因子输入组合下各模型算法精度对比2.4 随机森林回归模…

对象的接口

“类”,那个类具有自己的通用特征与行为。 因此,在面向对象的程序设计中,尽管我们真正要做的是新建各种各样的数据“类型”(Type),但几乎所有面向对象的程序设计语言都采用了“class”关键字。当您看到“ty…

多线程相关(1)

线程调度 线程状态:状态切换阻塞与唤醒阻塞唤醒 wait 与 sleep创建线程方式 线程是cpu任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈。 线程状态: 线程状态包括:创建、就绪、运行、阻塞、死亡…

第六十四天 服务攻防-框架安全CVE复现Apache shiroApache Solr

第六十四天 服务攻防-框架安全&CVE复现Apache shiro&Apache Solr 知识点: 中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic.JBoos,WebSphere, Jenkins,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring, Flask,jQuery等 1、开发框…

【rust】7、命令行程序实战:std::env、clap 库命令行解析、anyhow 错误库、indicatif 进度条库

文章目录 一、解析命令行参数1.1 简单参数1.2 数据类型解析-手动解析1.3 用 clap 库解析1.4 收尾 二、实现 grep 命令行2.1 读取文件,过滤关键字2.2 错误处理2.2.1 Result 类型2.2.2 UNwraping2.2.3 不需要 panic2.2.4 ? 问号符号2.2.5 提供错误上下文-自定义 Cust…

Vue 使用 v-bind 动态绑定 CSS 样式

在 Vue3 中&#xff0c;可以通过 v-bind 动态绑定 CSS 样式。 语法格式&#xff1a; color: v-bind(数据); 基础使用&#xff1a; <template><h3 class"title">我是父组件</h3><button click"state !state">按钮</button&…

相机图像质量研究(38)常见问题总结:编解码对成像的影响--呼吸效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

如何在同一个module里面集成多个数据库的多张表数据

确保本公司数据安全&#xff0c;通常对数据的管理采取很多措施进行隔离访问。 但是&#xff0c;Mendix应怎样访问散布于异地的多个数据库呢&#xff1f; 前几期我们介绍过出海跨境的大企业对于Mendix的技术、人才的诉求后&#xff0c;陆陆续续有其他客户希望更聚焦具体的实际场…

雷池社区版WAF:开源护网,共筑网络安全长城

雷池社区版WAF&#xff08;Web Application Firewall&#xff09;是一款开源的网络应用防火墙&#xff0c;旨在为网站和网络应用提供安全防护&#xff0c;以抵御各种网络攻击&#xff0c;如SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、文件包含、以及其他常见的安全威胁…

java日志框架总结(六、logback日志框架 扩展)

springboot推荐使用logback-spring.xml而不是logback.xml而logback-spring.xml文件与logback.xml文件还是有一定的区别&#xff0c;所以简单讲解一下。 一、logback-spring.xml 配置文件实例&#xff1a; <?xml version"1.0" encoding"UTF-8"?> …

刷LeetCode541引起的java数组和字符串的转换问题

起因是今天在刷下面这个力扣题时的一个报错 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 这个题目本身是比较简单的&#xff0c;所以就不讲具体思路了。问题出在最后方法的返回值处&#xff0c;要将字符数组转化为字符串&#xff0c;第一次写的时候也没思考直…

美团外卖商超商品月销量数据

字段内容&#xff1a; shop_id varchar(50) NOT NULL, shop_id_str varchar(50) NOT NULL, shop_name varchar(400) DEFAULT NULL, shop_min_price varchar(10) DEFAULT NULL, shop_score varchar(10) DEFAULT NULL, shop_wm_score varchar(10) DEFAULT NU…

「WinCC报警系统专题」简述“消息系统”

WinCC通过报警给操作员提供了有关过程故障和错误的信息。它们有助于尽早检测重要情况和避免停机时间。 一、消息系统 消息&#xff08;报警&#xff09;系统由组态和运行系统组件组成。 1、组态系统 报警记录编辑器&#xff08;如图1所示&#xff09;是报警系统的组态组件。报…