DevOps团队面临着越来越大的压力,需要快速向客户提供更多的功能。云供应商通过具有出色的CLI和API集成的可扩展平台提供了一个解决方案。不幸的是,云供应商暴露的接口可能是不兼容的。但一些云原生工具可以帮助DevOps团队为任何云供应商建立定制的解决方案。
两个这样的工具是Vagrant和Docker。了解它们的作用以及它们如何一起工作是获得云环境最大效益的关键。
Vagrant是一个在单一工作流程中构建和管理虚拟机(VM)环境的工具。无论你是建立本地虚拟机与管理程序一起运行,还是仅仅建立云虚拟机,Vagrant都提供了一个一致的配置格式、单一的CLI和共享的配置器来安装软件和改变配置。
Docker提供了将软件和支持性配置打包成镜像的能力,可以在多个平台上一致运行。Docker使DevOps团队有信心,软件在本地工作站上的运行方式与在管理云平台上的运行方式基本相同。
尽管Vagrant和Docker的共同目标是创建可重复的环境,但它们以不同但互补的方式进行。本文探讨了Vagrant和Docker如何实现它们的目标。
- 什么是Docker?
- 什么是Vagrant?
- Vagrant与Docker:近距离观察
什么是Docker?
Docker是一个开发、运输和运行应用程序的开放平台。它允许DevOps团队将定制的软件、支持的应用程序和库,以及配置、网络、文件挂载、健康检查和启动脚本的指示打包成一个独立的工件,称为镜像。
然后,镜像在一个被称为容器的轻量级、隔离的环境中执行。与通常保留固定数量的内存和严格限制CPU使用的虚拟机不同,容器的弹性更大,只消耗它们需要的内存和CPU。
这使得许多容器可以有效地并排运行,降低成本并提高规模。然而,容器并不像虚拟机那样被认为是安全的,这意味着容器并不是运行不受信任的代码的理想解决方案。
Docker
为什么使用Docker(对比Vagrant来说)?
DevOps团队通常使用Docker来交付和运行网络应用,包括云原生应用,这些应用要么与消息队列集成,要么托管在函数即服务(FaaS)平台上,响应基于云的触发器和事件。
像Kubernetes这样的平台建立在Docker的基础上,允许容器被大规模地协调。此外,每个云提供商都支持在其平台即服务(PaaS)产品中运行Docker容器的能力。现在很少能找到不支持Docker的PaaS了。
Docker还可以分发和执行基于CLI的工具,所有流行的云原生工具都提供嵌入其CLI的Docker镜像。
Docker的好处是什么?
Docker解决了传统软件部署过程中面临的一个共同问题,即定制的应用程序在开发人员的本地工作站和生产环境中运行时可能会表现出不同的结果。这些差异往往是由于开发人员运行不同版本的编程语言,对支持Web服务器等应用程序的配置不同,或者运行与生产环境完全不同的操作系统。这些差异导致支持问题在团队之间来回跳动,评论是:”它在我的机器上可以工作”。
由于Docker镜像包括自定义应用程序的代码、所有支持的应用程序和库,镜像在容器中执行,无论在哪里运行都能提供更一致的结果。
Docker镜像很容易使用Docker Hub这样的注册表进行分发,使DevOps团队能够在他们之间快速分享镜像,并使用各种托管平台部署镜像。
在需要更复杂的应用堆栈的地方,比如在后端应用旁边部署数据库,或者相关微服务的集合,Docker Compose提供了用一个命令创建和连接多个Docker容器的能力。所有容器、相关设置和网络配置都在一个YAML文件中定义。然后,Docker Compose读取该文件,将多个容器作为一个整体来创建和管理。
Docker还在主要的云供应商中享有近乎普遍的支持,这意味着DevOps团队在云中执行他们的Docker镜像时有很多选择。
什么是Vagrant?
几十年来,虚拟机已被证明是一种可靠和安全的计算资源分区和配置的解决方案。虚拟机仍然是云供应商暴露的最受欢迎的服务,许多商业和开源解决方案的团队都希望在企业内部运行虚拟机。
然而,这种多样性给DevOps团队带来了挑战。每个解决方案都暴露了不同的CLI和API来创建和管理虚拟机,使得本地开发环境和基于云的平台之间难以保持一致。
Vagrant提供了一个解决方案,它抽象了虚拟机平台之间的基本差异,允许DevOps团队用一个CLI和一致的配置语法来配置新的虚拟机。采用Vagrant的团队可以创建一致的虚拟机,无论它们是在企业内部还是在云环境中运行,并且可以在不同的环境中轻松切换。Vagrant有许多不同的用途,包括作为MAMP的替代品(macOS、Apache、MySQL/MariaDB、和PHP、Perl或Python)。
Vagrant
为什么使用Vagrant(相对于Docker来说)?
有可能通过手动安装软件和编辑配置文件来启动虚拟机并手动配置操作系统。这并不理想,因为这个过程是不可重复的,这意味着必须为不同的操作系统和供应商手动重新创建虚拟机。这也使得以后几乎不可能了解一个虚拟机是如何配置的。
一个更好的做法是将配置虚拟机的过程自动化。Vagrant提供了一个单一的工具,用于自动为许多供应商构建虚拟机的过程。Vagrant还在Vagrant云上提供了大量高质量的虚拟机选择,DevOps团队可以用它来开始他们自己的虚拟机。
Vagrant的好处是什么?
利用Vagrant的DevOps团队有一个单一的工具可以学习,无论他们是为企业内部平台、云平台或两者构建虚拟机。你可以轻松地调整Vagrant的配置文件,并在以后重新运行或审查这些文件,以了解虚拟机是如何构建的。
Vagrant还允许DevOps团队迁移到云端或在供应商之间迁移,而不需要重新设计他们用来构建虚拟机的过程。
Vagrant创建的虚拟机提供了高水平的隔离,通常利用现代CPU内置的专业虚拟化支持。这使得虚拟机和创建它们的工具,如Vagrant,成为安全和隔离是高度优先的最佳选择。
许多Linux发行版,如Ubuntu和Fedora,也提供官方的Vagrant盒子,DevOps团队可以在上面构建。这减少了构建自定义虚拟机的时间。
Vagrant与Docker:近距离观察
Vagrant和Docker都通过自动构建、分发和运行软件应用程序,使DevOps团队更加高效。
Docker通过镜像形式的自定义打包格式和通过容器的轻量级执行环境实现了这一目标。容器在不同的平台之间执行一致,使DevOps团队对他们的软件按预期运行更有信心。Docker得到了PaaS和FaaS云平台的良好支持,使DevOps团队可以根据自己的需要选择最佳平台。
许多容器可以在一台主机上共存,主要是–但不是完全–相互隔离,同时共享同一个资源池。这使得容器能够有效地扩展。
Vagrant通过提供一个一致的方法来构建现有供应商的虚拟机来实现这一目标。对于已经在虚拟机上投资的团队来说,这是一个理想的选择,因为他们依靠的是高度的隔离、安全、控制和定制。
在运行可信的代码时,Docker也提供了最好的解决方案,同时最大限度地降低了计算成本。容器之间是合理隔离的,但产生的开销却非常小。这意味着许多容器可以在一个共享的操作系统上同时运行。当团队需要高水平的隔离和安全,或者需要并排运行许多不同的操作系统时,虚拟机提供了最好的解决方案,Vagrant为以自动化和可重复的方式构建虚拟机提供了一个方便的解决方案。
Vagrant和Docker并不是相互排斥的技术,两种工具可以并肩使用。例如,DevOps团队可以使用Docker来开发和运行应用程序,同时使用Vagrant来重新创建专门的环境来再现问题。Docker甚至可以在Vagrant创建的虚拟机内运行,也许是为了测试Docker的新版本,或者在一个隔离的环境中测试作为Docker镜像分发的工具。
小结
DevOps团队在构建、分发和运行应用程序时有很多选择。
Docker提供了一个定制的镜像格式和容器执行环境,允许大规模和有效地使用资源,并支持跨PaaS和FaaS平台。
虚拟机提供了来自许多云和企业内部虚拟机供应商的安全和隔离的执行环境,Vagrant抽象了许多差异,提供了一个单一的CLI和一致的配置语法来跨供应商实例化虚拟机。
原文地址:https://www.wbolt.com/vagrant-vs-docker.html