Heroku和Docker都可以让开发人员能够在容器内开发、部署和运行应用程序。容器是在单个操作系统内核上运行的虚拟环境,使应用程序能够使用虚拟机或裸机计算机系统所需资源的一小部分来运行。容器还使我们能够快速扩展应用程序,并轻松地从开发过渡到生产。虽然Heroku和Docker都为软件部署和管理提供了一个容器化的解决方案,但是它们在实现和术语方面有很大的不同。每个系统也有着不同的利与弊。
容器是使应用程序能够共享单个操作系统的软件系统。容器系统通常由容器引擎、主机操作系统和处理器组成。
因为容器允许应用程序共享资源,所以它们提供了以下几个优点:
Heroku是一个平台即服务(PaaS)平台,是2007年创建的第一批云平台之一。Heroku最初只支持Ruby,但现在已支持Java、Node.js、Python、 PHP等。Heroku由以下组件组成:
有没有考虑过将DeployPlace作为Heroku的替代方案以避免被供应商锁定?
Docker是一个开源工具,用于在容器中创建、管理、部署和运行应用程序。与Heroku必须在自己的云环境中运行不同,Docker可以安装在笔记本电脑、服务器或如Amazon Web Services (AWS)之类基于云的环境中。Docker由以下高级组件组成:
术语 | Docker | Heroku |
---|---|---|
构建文件—用于构建镜像的命令集。 | DockerFile | BuildPack |
镜像——包含用于运行应用的所有资源镜像 | Docker镜像 | Slug |
容器——包含运行隔离进程的可执行代码的静态文件。 | Docker容器 | Dyno |
Index——应用程序构建块的来源。 | Docker Index | Add-Ons |
命令行界面。 | CLI | CLI |
虽然Docker和Heroku有一个共同的概念,即应用程序的容器化,但是这两个平台之间有着一些主要的区别。Heroku提供了运行应用程序的容器和托管应用程序的基础设施。换句话说,Heroku提供了容器化的所有优点,但是你也必须在Heroku平台上运行它。这使得Heroku非常容易搭建和运行,但是同时也有一些限制。与Docker不同,Heroku不能在本地服务器或基于私有云的服务上运行。
Heroku的优点:
Heroku的缺点:
Heroku的流言:
Heroku的陷阱
Heroku的客户如果想通过免费的途径省钱,就会使用较低的成本级别,但在系统为了节省公司资金关闭资源的时候,可能会遭遇“ 休眠应用”。 对于不知情的用户来说,这种意外很是令人不快,这么度量简直太不方便了!它根本就是在“故意停机”,你花了钱却不能掌控它!
服务器和进程(Heroku在多租户共享服务器中存储实例的地方)也缺乏所有权。从某种意义上说,客户实际上没有选择服务器部署在何处的权利。
Docker 的优点:
Docker 的缺点:
Docker 的陷阱
开发团队有时会遇到Docker的问题,其中许多问题与该技术的开源本质有关。在许多不同类型的用例中,覆盖网络会导致延迟。这种延迟可能会成为一个问题,特别是对于那些需要接近裸机地运转才能实现实时目标的公司来说。
Docker的另一个主要问题是需要将有价值的数据导入Docker容器镜像,并将其保存在镜像中。由于容器通常是为无状态功能构建的,因此会丢失本要持久保存的数据。当这种情况发生时,就会变得非常麻烦。专家和经验丰富的开发人员总是警告不要将持久数据放在不应该放的地方,每次都敦促其他人“坚守阵地”。
特性 | Docker | Heroku |
---|---|---|
灵活性 | 非常灵活的部署 | 灵活的部署 |
易用性 | 更复杂的配置 | 简单的配置 |
可移植性 | 非常容易移植 | 不可移植 |
价格 | 便宜的主机 | 更加昂贵 |
通过在Heroku的基础设施上部署Docker,可以同时享受这两个领域的好处。Heroku的平台简化了设置和部署,并且几乎没有风险。虽然与AWS这样的平台相比,在Heroku上部署的初始费用更昂贵,但是许多公司最终在Heroku上节省了资金,因为与其他平台相比,节省了所有在配置上要花费的时间。
在Heroku上部署Docker的优点包括:
在Heroku平台上部署Docker的主要缺点是丢弃了一些Heroku的自动配置特性,承担了更多的责任。如果使用标准的slug编译器和默认的stack,Heroku将自动检查安全性更新,更新stack,然后自动迁移应用程序。但是,如果使用Docker容器,Heroku就不能这样做了,责任就落在了管理应用程序的人的身上。
Docker 的客户
Docker在G2Crowd上的评分是4.4分(满分5分),共有200名用户做了评价。许多公司选择Docker以在容器中快速部署服务器环境,而不需要创建虚拟机。
Heroku的客户
Heroku经常被初创公司和行业领导者选择,用于快速构建强大的可以快速发布的数据驱动应用程序。Docker在G2Crowd上的评分是4.3分(满分5分),共有76名用户做出了评价。
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部署相比,它确实将更多的责任分配给了应用程序管理者。另一方面,更大的责任也使你能够更好地控制应用程序。
原文链接:
领取专属 10元无门槛券
私享最新 技术干货