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 Services 和 IBM BlueMix。
还有很多非CF项目旨在在核心Docker技术周围放置平台层,包括自行运行和托管服务。
请查看 Google的Kubernetes项目 和 Amazon容器服务
完整披露:我是在Pivotal上工作的Cloud Foundry软件工程师