Docker 是一种用于创建和运行 Linux“容器”的技术。在某种意义上,您可以将这些视为轻量级虚拟机。 SpringBoot 应用程序的 docker 容器将包含一个 docker 映像,它基本上包含一个文件系统,其中包含运行您的应用程序所需的所有东西(JVM、您的源代码等),以及 docker 容器元数据,它告诉 docker 守护进程如何在映像中运行应用程序(例如要设置哪些环境变量、要公开哪些端口、要运行哪些命令等)。 docker 守护进程将使用 Linux 功能(例如 cgroups 和内核命名空间)来运行容器,与主机上运行的其他进程隔离开来。 Docker 有点低级,因为您需要指定进入映像的所有内容,并且它运行任意事物,即您放入映像中并告诉它运行的任何内容。您获得的 docker 容器非常便携,因此您可以在本地构建、测试和运行您的 docker 容器以进行开发,然后将该容器运送到也运行着 docker 守护程序的生产主机上,并且非常有信心你得到了完全相同的东西。
Cloud Foundry 工作在更高的抽象层,应用程序是一流的概念。 Cloud Foundry 使用类似于 docker 的容器化技术来构建可移植镜像然后运行它们,但这是一个实现细节,您不需要指定所有细节。在较新版本的 Cloud Foundry 中,还将支持 docker 映像,因此您可以根据需要指定详细信息,但它还有一个“buildpack”工作流程,当您推送应用程序时它会自动检测 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 和 Cloud Foundry on BOSH-Lite。
还有几个托管的 Cloud Foundry 服务。
见Pivotal Web Services和IBM BlueMix
还有许多非 CF 项目旨在围绕核心 docker 技术放置一个平台层,包括运行您自己的和托管服务的品种。
见Google's Kubernetes project和Amazon Container Service
全面披露:我是一名在 Pivotal 从事 Cloud Foundry 的软件工程师