我们使用带有以下清单文件的cf push
将Java应用程序推送到Cloud Foundry上
applications:
- name: xyz-api
instances: 1
memory: 1G
buildpack: java_buildpack_offline
path: target/xyz-api-0.1-SNAPSHOT.jar
我了解到,PAAS(例如:Cloud Foundry)是IAAS(例如,托管Linux和Windows VM的vcenter)之上的一层。
在清单文件中,buildpack
仅讨论运行应用程序所需的用户空间运行时库。
来自非云背景,并且阅读了此清单文件,我想了解...
1)如何了解应用程序正在运行的操作系统(OS)环境?在哪个操作系统上...
2)在bosh实例上运行的应用程序与docker容器有何不同?
答案 0 :(得分:2)
1)如何了解应用程序正在运行的操作系统(OS)环境?在哪个操作系统上...
堆栈确定您的应用将在其上运行的操作系统。清单中有一个stack
属性,或者您可以使用cf push -s
来指示堆栈。
您可以运行cf stacks
来查看所有可用的堆栈。
在撰写本文时,在大多数环境中,您将拥有cflinuxfs2
。这是Ubuntu Trusty 14.04。它会被cflinuxfs3
所取代,后者是Ubuntu Bionic 18.04,因为Trusty仅支持到2019年4月。尽管您将始终拥有一些cflinuxfs*
堆栈,但是数量会根据阅读本文的时间而有所不同。
在某些环境中,您可能还具有基于Windows的堆栈。原始的基于Windows的堆栈是windows2012r2
。在我撰写本文时,这已经很老了,所以您可能再也看不到它了。您可能会看到windows2016
或更新的内容,具体取决于您何时阅读。
如果您需要更多控制权,可以随时推送Docker容器。这样一来,您就可以为应用选择完整的操作系统映像。
2)在bosh实例上运行的应用程序与docker容器有何不同?
运行在Cloud Foundry上的应用程序不是由BOSH直接部署的。该应用程序在容器中运行。该容器由Diego安排和运行。 Diego是BOSH部署的VM。所以那里有一个额外的层。
从根本上讲,在Cloud Foundry上运行应用程序与在Docker容器中运行应用程序之间的差异很小。它们都在Linux的“容器”中运行,内核名称空间和cgroups对其施加了限制。
区别在于a。)如何构建容器和b。)容器的部署方式。
使用Cloud Foundry,您无需构建容器。您可以将应用程序提供给CF,CF会根据所选堆栈和buildpacks添加的其他软件来构建容器映像。 CF术语中的输出称为“液滴”,但它基本上是OCI映像(在buildpacks v3中甚至更是如此)。当您需要升级或添加新代码时,只需重复该过程并再次推送即可。堆栈和buildpacks会由平台自动更新,它们将依次为您提供补丁程序和最新的应用程序映像。
使用Docker,您可以手动创建映像,从头开始或从某些受信任的基础映像建立它。您添加自己的运行时和应用程序代码。当您需要升级时,就可以从基础映像和运行时中获取更新,或更糟的是从头开始更新映像。
在部署时,CF会自动为您处理所有这些。它可以运行您想要的应用程序的任意数量的实例,并会自动放置这些实例,以便您的应用程序能够抵抗基础结构和CF中的故障。
有了Docker,您就可以使用它,或者越来越多地使用Kubernetes之类的其他工具。
希望有帮助!