首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

企业容器化如何选型?全方位对比 Heroku 与 Docker

Heroku和Docker都可以让开发人员能够在容器内开发、部署和运行应用程序。容器是在单个操作系统内核上运行的虚拟环境,使应用程序能够使用虚拟机或裸机计算机系统所需资源的一小部分来运行。容器还使我们能够快速扩展应用程序,并轻松地从开发过渡到生产。虽然Heroku和Docker都为软件部署和管理提供了一个容器化的解决方案,但是它们在实现和术语方面有很大的不同。每个系统也有着不同的利与弊。

什么是容器?

容器是使应用程序能够共享单个操作系统的软件系统。容器系统通常由容器引擎、主机操作系统和处理器组成。

  • 容器引擎——在这种情况下,Docker或Heroku是一种用于部署容器化应用程序的托管环境。容器引擎管理内核和内存。它还管理各个应用程序的空间隔离和安全性,并允许可伸缩性。
  • 主机操作系统(OS)——主机操作系统(通常是Linux)提供用户界面,内存等资源的管理,并为应用程序提供服务。
  • 处理器——也称为中央处理器,它基于来自操作系统和应用程序的指令,负责执行所有的任务。

容器的优点

因为容器允许应用程序共享资源,所以它们提供了以下几个优点:

  • 降低成本—容器通过允许应用程序共享资源来降低成本。
  • 增加的可靠性和健壮性——容器使我们可以做到快速的故障切换和恢复。
  • 可伸缩性——容器使我们可以快速且容易地伸缩应用程序的数量。
  • 隔离——容器在名称空间中使用自己的资源隔离每个应用程序。因此,尽管应用程序共享资源,但它们在职能上是相互隔离的。这还意味着一个应用程序中的故障是与其他应用程序隔离的,从而使容器比虚拟机或裸金属系统更安全。
  • 持续集成——因为容器很容易被摧毁和部署,所以它们支持迭代过程,比如敏捷。
  • 可移植性——容器非常便携,允许从开发到生产的轻松转换,在云环境中效果尤为显著。
  • 安全——容器的模块化设计增加了隔离性,使系统更难被攻击,并限制了恶意软件的影响。
    • 容器进程必须只向容器特定的文件系统写入信息。
    • 容器命名空间必须与私有内部网隔离。
    • 容器特权必须隔离。

Heroku

Heroku是一个平台即服务(PaaS)平台,是2007年创建的第一批云平台之一。Heroku最初只支持Ruby,但现在已支持Java、Node.js、Python、 PHP等。Heroku由以下组件组成:

  • BuildPack—Heroku BuildPack是一组用于创建镜像的脚本。BuildPack确定应用程序可以运行的语言,包括Java、Python、Ruby和其他语言。Heroku为各种语言提供了默认的BuildPack ,开发人员也可以构建自己的BuildPack。
  • Slug——运行BuildPack时,它会创建应用程序的打包副本,称为Slug。Slugs包含运行应用程序所需的所有功能,可以快速轻松地部署。
  • 根据Heroku的说法,“Dynos是隔离的、虚拟化的Linux容器,用于根据用户指定的命令执行代码”。使用Dynos,可以根据资源需求将应用程序扩展到任何级别。
  • 可为Heroku购买Add-Ons-Preconfigured构建块,以构建更复杂的应用程序。
  • 命令行界面(CLI)——用来管理Heroku容器的命令行界面。

有没有考虑过将DeployPlace作为Heroku的替代方案以避免被供应商锁定?

Docker

Docker是一个开源工具,用于在容器中创建、管理、部署和运行应用程序。与Heroku必须在自己的云环境中运行不同,Docker可以安装在笔记本电脑、服务器或如Amazon Web Services (AWS)之类基于云的环境中。Docker由以下高级组件组成:

  • Dockerfile——Dockerfile是一组用于构建Docker镜像的命令(参见下文)。Dockerfiles也代表着Docker镜像的最终配置。
  • Docker镜像——通过运行Dockerfile创建的Docker镜像(参见上文)。Docker镜像是一个多层文件,包含运行应用程序所需的所有资源、依赖项、数据、文件和设置。每次启动一个Docker镜像时,它都会创建一个同一个应用程序的容器,从而提供了简单的可伸缩性。
  • Index——Docker图像可以上传到Index分享给Docker社区。这样可以让其他用户基于从Index下载的单个Docker镜像组件构建复杂的应用程序。
  • 命令行界面(CLI)——与Heroku类似,Docker提供了用于管理容器的CLI。

Docker和Heroku术语

术语

Docker

Heroku

构建文件—用于构建镜像的命令集。

DockerFile

BuildPack

镜像——包含用于运行应用的所有资源镜像

Docker镜像

Slug

容器——包含运行隔离进程的可执行代码的静态文件。

Docker容器

Dyno

Index——应用程序构建块的来源。

Docker Index

Add-Ons

命令行界面。

CLI

CLI

Docker vs Heroku

虽然Docker和Heroku有一个共同的概念,即应用程序的容器化,但是这两个平台之间有着一些主要的区别。Heroku提供了运行应用程序的容器和托管应用程序的基础设施。换句话说,Heroku提供了容器化的所有优点,但是你也必须在Heroku平台上运行它。这使得Heroku非常容易搭建和运行,但是同时也有一些限制。与Docker不同,Heroku不能在本地服务器或基于私有云的服务上运行。

Heroku

Heroku的优点:

  • Heroku易于搭建、实施和部署。Heroku管理硬件、软件和其他资源,使开发人员可以几乎只专注于开发他们的应用程序。
  • Heroku支持多种语言,包括:
    • Ruby
    • Java
    • Node.js
    • Scala
    • Clojure
    • Python
    • PHP
    • Go
  • Heroku是一个通晓多种语言的平台——通过使用各种构建包,开发人员可以在几乎任何编程语言中部署应用程序。
  • Heroku Dynos允许简单的开发和可用性——因为由Heroku管理和运行应用程序,将开发人员从操作系统和其他系统配置的管理中解放出来。
  • Heroku允许即时的可伸缩性——通过增加或减少Dynos的数量,可以很容易地按比例增加或减少Heroku。

Heroku的缺点:

  • 在Heroku上运行的应用程序只能在Heroku平台上运行。因此,Heroku不能在内部服务器或私有云上运行。了解一下DeployPlace,以避免被供应商锁定。
  • Heroku应用程序只能使用Linux操作系统运行。
  • 虽然Heroku提供了一个免费的版本,但标准套餐每月25美元起。

Heroku的流言:

  1. Heroku太贵了。许多公司更喜欢寻找、招聘和培训DevOps工程师来搭建和支持部署基础设施。招聘、培训、工资和办公的成本常常被忽视。在主要关注开发更好的产品的同时,DevOps团队的招募和管理可能会被忽视。
  2. 有时Heroku被认为不够安全。但是Heroku比你自主研发的部署基础设施安全得多。Heroku有一个单独的团队处理安全问题。Heroku的安全特性已经在数千个实际客户的应用程序上进行了测试。对于大多数不需要额外认证的行业来说,Heroku的安全性绝对没有问题。

Heroku的陷阱

Heroku的客户如果想通过免费的途径省钱,就会使用较低的成本级别,但在系统为了节省公司资金关闭资源的时候,可能会遭遇“ 休眠应用”。 对于不知情的用户来说,这种意外很是令人不快,这么度量简直太不方便了!它根本就是在“故意停机”,你花了钱却不能掌控它!

服务器和进程(Heroku在多租户共享服务器中存储实例的地方)也缺乏所有权。从某种意义上说,客户实际上没有选择服务器部署在何处的权利。

Docker

Docker 的优点:

  • 几乎可以在任何环境下运行—docker可以在内部服务器、私有云系统甚至是在Heroku PaaS本身上运行。
  • 可定制——因为Docker几乎可以在任何平台上运行,所以可以对它进行定制以满足你的所有需求。
  • 安全性——因为Docker可以在内部服务器上运行,所以它的安全性可以让你满意。
  • 操作系统——docker可以运行在各种操作系统上,包括Linux、Windows和其他操作系统。
  • 成本——AWS上的Docker相对便宜,大约每月4.75美元起。

Docker 的缺点:

  • 很难配置——与Heroku相比,Docker的灵活性意味着它需要更多的配置才能正确设置。

Docker 的陷阱

开发团队有时会遇到Docker的问题,其中许多问题与该技术的开源本质有关。在许多不同类型的用例中,覆盖网络会导致延迟。这种延迟可能会成为一个问题,特别是对于那些需要接近裸机地运转才能实现实时目标的公司来说。

Docker的另一个主要问题是需要将有价值的数据导入Docker容器镜像,并将其保存在镜像中。由于容器通常是为无状态功能构建的,因此会丢失本要持久保存的数据。当这种情况发生时,就会变得非常麻烦。专家和经验丰富的开发人员总是警告不要将持久数据放在不应该放的地方,每次都敦促其他人“坚守阵地”。

比较Docker和Heroku

特性

Docker

Heroku

灵活性

非常灵活的部署

灵活的部署

易用性

更复杂的配置

简单的配置

可移植性

非常容易移植

不可移植

价格

便宜的主机

更加昂贵

在Heroku上部署Docker

通过在Heroku的基础设施上部署Docker,可以同时享受这两个领域的好处。Heroku的平台简化了设置和部署,并且几乎没有风险。虽然与AWS这样的平台相比,在Heroku上部署的初始费用更昂贵,但是许多公司最终在Heroku上节省了资金,因为与其他平台相比,节省了所有在配置上要花费的时间。

在Heroku上部署Docker的优点包括:

  1. 开发环境和生产环境之间的差异更小。
  2. 更好地控制如何构建包。例如,如果你的应用程序使用了一门不使用标准buildpack的语言,那么你可以在Docker中构建它。

在Heroku平台上部署Docker的主要缺点是丢弃了一些Heroku的自动配置特性,承担了更多的责任。如果使用标准的slug编译器和默认的stack,Heroku将自动检查安全性更新,更新stack,然后自动迁移应用程序。但是,如果使用Docker容器,Heroku就不能这样做了,责任就落在了管理应用程序的人的身上。

哪些公司使用Docker和Heroku?

Docker 的客户

Docker在G2Crowd上的评分是4.4分(满分5分),共有200名用户做了评价。许多公司选择Docker以在容器中快速部署服务器环境,而不需要创建虚拟机。

  • ADP——它使用Docker建立一个安全的软件供应链,为113个国家的近4000万活跃用户服务。 * ALM. Brand——使用Docker 企业版精简了它的Oracle WebLogic应用程序,并构建了新的应用程序。
  • ASSA ABLOY——ASSA ABLOY是一家著名的锁具制造商,利用Docker 企业版来加速其电子接口和锁具硬件的市场交付。
  • Baker Hughes GE——使用Docker,将部署时间从6个月减少到1个小时。
  • GlaxoSmithKline——使用Docker企业版来加速药物配送模型和改进研究。
  • Visa——Visa利用Docker对其支付处理应用进行了重构,最终实现了10倍的可扩展性提升。

Heroku的客户

Heroku经常被初创公司和行业领导者选择,用于快速构建强大的可以快速发布的数据驱动应用程序。Docker在G2Crowd上的评分是4.3分(满分5分),共有76名用户做出了评价。

  • Altus Assessments——Altus Assessments使用Heroku来运行成千上万的数据密集型测试。
  • SwimTopia——Heroku帮助SwimTopia在高峰期无缝地伸缩。
  • SHIFT Commerce——使用Heroku电子接口并聚集硬件市场,使SHIFT Commerce的快速增长成为可能。
  • ClickFunnels——ClickFunnels运用Heroku灵活的数据服务抓住了增长的机会。
  • Moneytree——Moneytree专注于他们的业务,而Heroku负责数据安全和遵从性
  • DrivenData——Heroku为DrivenData的数据科学应用提供了一个安全的平台。

总结

Heroku和Docker都是容器化的极佳选择。它们都可以运行各种语言的应用程序,包括Java、Ruby、PHP和其他语言。它们还提供了简单的可伸缩性和部署。

Heroku和Docker之间的主要区别在于它们的实现。Heroku和Docker都使用容器进行操作,容器是一个自包含的代码实例,包含运行应用程序所需的所有内容,包括代码、资源和工具。但是,Heroku在它自己的Heroku部署流水线中提供容器。这使得Heroku非常容易配置,因为包、容器和环境整体上都已经为你配置好了。Heroku非常适合希望无需复杂的配置即可在一个固定的环境中部署应用程序的新开发人员或者小公司。

另一方面,Docker提供了一个容器化模型,它可以运行在各种各样的平台上,从内部服务器到私有云、AWS甚至是Heroku环境本身。因此,与Heroku相比,Docker在部署方面要灵活得多。然而,伴随这种灵活性而来的是更复杂的部署过程。

因此,Docker更适合具有更具体配置要求的公司。例如,如果你的应用程序需要一个非常安全的环境,你可以运行Docker on-premise并根据你的规范配置安全性。更大的灵活性也带来了一定程度的复杂性。Heroku基本上可以直接运行,而Docker则要根据你的需要进行更多配置。

在某些情况下,开发人员可以通过在Heroku上部署Docker来利用两个平台的特性。这减轻了Docker在其他PaaS平台上带来的许多部署和实现难题,但是与纯Heroku部署相比,它确实将更多的责任分配给了应用程序管理者。另一方面,更大的责任也使你能够更好地控制应用程序。

原文链接:

https://deployplace.com/blog/heroku-vs-docker/

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/lJlMlaRVQGLhimR6J03b
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券