Cloud Foundry和Docker有什么区别?

70

我是一名Java开发者,我们使用Weblogic来托管应用程序。 我被告知要寻找一个开源的替代方案来取代Weblogic。我们计划使用SpringBoot。我们还在考虑Docker/Cloud Foundry。然而,Docker/Cloud Foundry对我来说是一个新领域。

  1. 能否有人告诉我Cloud Foundry和Docker之间的区别?
  2. 如果我们使用Docker但不使用Cloud Foundry,那么我们会错过什么?
  3. 如果我们使用Cloud Foundry但不使用Docker,那么我们会错过什么?

感谢您的帮助。


更准确的比较应该是将Docker与Warden(在CF内部使用)进行比较。 - D-side
http://heidloff.net/nh/home.nsf/article.xsp?id=20.02.2015092308NHEBUJ.htm - satks
1
您不能将PaaS(平台即服务)与容器技术进行比较。容器技术只是Cloud Foundry的一小部分。 - Sybil
1个回答

142
Docker是一种创建和运行Linux“容器”的技术。从某种意义上说,您可以将它们视为轻量级虚拟机。SpringBoot应用程序的docker容器包含一个docker镜像,其中基本上包含了运行您的应用程序所需的所有文件系统(JVM、源代码等),以及docker容器元数据,告诉docker守护进程如何在镜像内运行应用程序(例如设置哪些环境变量、开放哪些端口、运行哪些命令等)。docker守护进程将使用Linux功能,如cgroups和内核名称空间,将容器与主机上运行的其他进程隔离开来。Docker有点低级,因为您需要指定放入镜像中的所有内容,并且它运行任意东西,即您放入镜像并告诉它要运行的任何东西。您得到的docker容器非常便携,因此您可以在本地构建、测试和运行docker容器,然后将该容器发送到生产主机,该主机也在其上运行docker守护进程,并相当自信地确保您获得完全相同的东西。
Cloud Foundry工作在更高的抽象层,应用程序是一个一流的概念。Cloud Foundry使用类似于Docker的容器技术来构建可移植的映像,然后运行它们,但这是一种实现细节,您不需要指定所有细节。在较新版本的Cloud Foundry中,也将支持Docker映像,因此如果您想要指定详细信息,可以这样做,但它还具有“构建包”工作流,当您推送应用程序时,它会自动检测Java应用程序,并知道在构建映像时包括所有必要的Java运行时所需的内容。
使用Cloud Foundry,因为应用程序和应用程序管理是一级概念,并且它在更高级别上运行,您会免费获得各种各样的功能。例如,您可以轻松地水平缩放您的应用程序(添加实例),例如cf scale my_app -i 5或垂直缩放cf scale my_app -m 2G(为每个实例设置分配的内存)。您可以获得流式应用程序日志:cf logs my_app。Cloud Foundry免费为您提供许多容错功能,因此,如果您的应用程序实例之一崩溃,或者运行应用程序容器的进程本身崩溃(类似于docker守护程序的东西),或者运行容器的进程的主机VM死亡,或者托管VM的硬件群集死亡,则Cloud Foundry将自动重新启动您的实例。
Docker守护程序是可以在任何Linux机器上运行的单个进程。因此,如果您要做一些小而简单的事情,并且需要自己完成大部分设置,则使用docker在本地和开发中启动和运行可能更容易。使用docker也更容易访问和共享创建的docker镜像,因此,一旦您创建了一个镜像,就可以将其放入docker存储库中,然后可以在任何其他docker守护程序上运行它。对于Cloud Foundry而言,构建的镜像通常是实现细节,您无法真正访问它,因此,例如,您无法提取该镜像并在另一个Cloud Foundry安装上运行它。
有各种项目旨在使Cloud Foundry更易于访问和设置,同时仍为您提供PaaS的许多好处。其中一些项目还旨在允许您结合使用docker和docker的好处,同时获得来自Cloud Foundry的许多PaaS优势。
请参见Lattice BOSH-Lite上的Cloud Foundry
还有几个托管的Cloud Foundry服务。

请查看 Pivotal Web ServicesIBM BlueMix

还有很多非CF项目旨在在核心Docker技术周围放置平台层,包括自行运行和托管服务。

请查看 Google的Kubernetes项目Amazon容器服务

完整披露:我是在Pivotal上工作的Cloud Foundry软件工程师


Cloud Foundry是否支持多个Docker容器?它是否支持多个端口?我们想要安装ELK堆栈,需要三个端口。 - powder366
这些端口是用于来自互联网的入站流量,还是用于容器之间的通信?如果是后者,那么您应该能够做到这一点。您可以在Cloud Foundry应用程序服务实例上部署Spark 此处 ,其中涉及推送多个Docker镜像并允许它们通过数百个端口相互通信(因为这似乎是Spark的工作方式)。 - Amit Kumar Gupta
来自互联网的入站流量,例如使用常规的Kibana和Elasticsearch WEB界面等。另外,为什么容器不能保持状态?我们有数据需要在重新启动时保存在容器中。 - powder366
值得一提的是,Cloud Foundry默认使用Garden进行容器管理 https://docs.cloudfoundry.org/concepts/architecture/garden.html 您可以配置CF使用Docker https://docs.cloudfoundry.org/adminguide/docker.html 作为选项。 - A B
1
@AB 容器运行时和支持的镜像格式是不同的问题。当我写下这个回答(2015年)时,我说:“在Cloud Foundry的新版本中,也将支持Docker镜像。”现在,Cloud Foundry已经支持Docker镜像相当长的一段时间了。此外,Cloud Foundry的Diego调度程序与Garden容器运行时API通信已经有一段时间了,但实际的容器运行时实现已被替换为runc - Amit Kumar Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接