湖南网站建设优化,软件工程考研容易上岸的学校,中国网络营销论坛,网页设计基础知识点考试关于应用程序的托管和开发#xff0c;市场中的技术和产品琳琅满目。对比 Docker 和 VM#xff0c;如何取舍#xff1f;这主要由自身团队的因素决定#xff0c;在选择 Docker 的情况下#xff0c;你需要保证程序可在容器和虚拟机中运行。另外#xff0c;成本和易用性也是重… 关于应用程序的托管和开发市场中的技术和产品琳琅满目。对比 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 数据库而持久存在。
与之前一样我们可以从掌握的信息中整理出一些关键的细节
可以使用 Docker 基础镜像为应用程序提供服务该镜像可生成结果并将结果发布到容器内的应用程序层。即使通过程序扩展容器也必须保持会话。需要使用编排工具如 Kubernetes来进行内部监测并能够在卡住状态下重新创建容器。Docker 主机应与 MS SQL 虚拟机位于同一 VLAN 上保证数据安全传输。
在这一点上混合方式更加有效。如前所述MS SQL 最好在虚拟机这样的基础设施上运行以便有效地配置、监控。编排工具也能加入保证数据持久、安全。比如 Kubernetes 的监控和自我修复等功能可让集群以正确的方式启动程序并持续运转。
在某些情况下“容器化”应用程序并不可行虚拟机更胜一筹。但是通过将现有裸机的基础设施转换为虚拟化基础设施仍然可以快速制胜。更多的资源释放出来用于虚拟化的额外计算、内存和存储任务。
总结
很多情况下遗留系统处理和新程序开发青睐 Docker。每种方式各有所长学会取长补短才是制胜的关键。不过无论在哪种情况下虚拟化都是开发、管理程序的有效工具。
无论你是开发一个简单的日期/时间程序还是每分钟需要处理上千个任务都有合适的产品和技术协助你提高服务水平和稳定性。了解每种技术花点时间研究不同程序是如何在这两种技术中运行的。最好的方法是进行真正的性能比较这样才能做出正确决策。
Incredibuild 解读
在讨论 Docker 与 VM 时我们也可以从 Incredibuild 的角度分析。
如今VM 和容器不仅用于生产更是成熟 CI/CD 管道中的一部分。当 VM或容器用作构建服务器来运行 CI/CD 时Incredibuild 可以将之转换为超级容器包含数百个内核资源。这些内核可以全面加速构建、测试和其他计算密集型进程点击链接免费试用。