Cloud Foundry和Docker有什么不同?

我是一名Java开发人员。 我们使用Weblogic来托pipe我们的应用程序。 我被告知要用开源的替代方法来替代weblogic。 我们正在计划使用SpringBoot。 我们也在看Docker / Cloud Foundry。 然而,Docker / Cloud Foundry是我的新领域。

  1. 有人能告诉我Cloud Foundry和Docker的区别吗?
  2. 如果我们使用Docker而不是Cloud代工,我们错过了什么?
  3. 如果我们使用Cloud Foundry而不是Docker,那么我们错过了什么?

感谢您的帮助。

Docker是一种创build和运行Linux“容器”的技术。 从某种意义上说,你可以把它们看作是轻量级的虚拟机。 一个用于SpringBoot应用程序的docker容器将包含一个docker镜像,它基本上包含一个文件系统,包含运行你的应用程序(JVM,你的源代码等)所需的所有东西,以及docker容器元数据,它告诉docker守护进程在图像中运行应用程序(例如,要设置什么环境variables,要显示哪些端口,要运行的命令等)。 docker守护进程将使用诸如cgroups和内核命名空间之类的Linux特性来独立运行主机上运行的其他进程的容器。 Docker是有点低级的,因为你需要指定进入镜像的所有东西,它运行任意的东西,也就是你放入镜像的任何东西,然后让它运行。 你得到的Docker容器是非常便携的,所以你可以在本地构build,testing和运行Docker容器进行开发,然后将该容器运送到一个生产主机,该主机上还运行着一个docker守护进程,并且相当自信你得到完全一样的东西。

Cloud Foundry工作在更高层次的抽象层次,应用程序是一stream的概念。 Cloud Foundry使用类似于docker的集装箱化技术来构build可移植的图像,然后运行它们,但这是一个实现细节,不需要指定所有细节。 在较新版本的Cloud Foundry中,Docker镜像也将被支持,因此您可以指定详细信息,但它也有一个“buildpack”工作stream程,在您推送应用程序时它将自动检测Java应用程序,包括构build映像时Java运行时所需的所有东西。

有了Cloud Foundry,由于应用程序和应用程序pipe理是一stream的概念,并且由于它在更高层次上运行,因此您可以免费获得各种各样的东西。 例如,您可以轻松地水平缩放您的应用程序(添加实例),例如cf scale my_app -i 5或vertical, cf scale my_app -m 2G (为每个实例设置分配的内存)。 您将获得stream应用程序日志: cf logs my_app 。 Cloud Foundry为您提供了大量免费容错function,因此,如果您的某个应用程序实例崩溃,或者运行应用程序容器的进程崩溃(类似于docker守护进程),或者运行容器的主机虚拟机运行进程死亡或VM所在的硬件集群死亡,Cloud Foundry将自动恢复实例。

docker守护进程是一个可以在任何Linux机器上运行的进程。 所以,如果你正在做一些小而简单的事情,而且你需要自己完成大部分的设置,那么使用docker在本地和开发中启动和运行起来会更容易。 使用docker工具,访问和共享您创build的docker图像也变得更加容易,所以一旦创build了一个图像,就可以将其放置在docker仓库中,然后在任何其他docker守护程序中运行它。 使用Cloud Foundry,构build的映像通常是实现细节,并且您无法访问该映像,因此您无法提取该映像并在另一个Cloud Foundry安装中运行该映像。

有各种各样的项目旨在使Cloud Foundry更易于访问和更容易设置,同时仍然为您提供PaaS的诸多好处。 其中一些项目也旨在让您结合使用docker工人和docker工人的好处,同时也从Cloud Foundry中获得很多PaaS的好处。

请参阅BOSH-Lite上的 Lattice和Cloud Foundry 。

还有几个托pipe的Cloud Foundry服务。

请参阅Pivotal Web服务和IBM BlueMix

还有很多非CF项目旨在围绕核心docker技术提供一个平台层,包括自主运营和托pipe服务。

请参阅Google的Kubernetes项目和Amazon Container Service

全面披露:我是一名在Pivotal的Cloud Foundry工作的软件工程师