从Docker容器迁移到Cloud Foundry容器

时间:2015-10-29 05:15:17

标签: docker cloudfoundry

最近我开始练习Dockers。基本上,我在Docker容器上运行C应用程序。现在,我想尝试云代工,因此,试图了解两者之间的差异。

我会将该应用程序描述为新手,因为我是。 我作为服务启动的应用程序(来自/etc/init.d 的)并在启动期间读取配置文件,它指定要加载的所有模块和其他服务的IP以及它自己的(0.0。 0.0不起作用,所以我必须给出实际的IP)。

我必须在容器启动时手动更新配置文件中的IP和一些细节。所以,我编写了一个启动脚本,它在容器启动时执行所有更改,然后执行服务启动命令。

现在,继续使用Cloud Foundry,我无法找到的第一件事是“如何部署C应用程序”然后我找到了一个C构建包和一个二进制构建包选项。我仍然需要尝试这些,但我无法理解如何向云代工厂容器提供启动脚本,或者简要介绍如何实现我对Dockers所做的工作。

我的最后一个选择是在Cloud Foundry中使用docker容器,但我想了解我是否可以实现上述描述。

我希望我能够清楚地解释我的怀疑。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

一个古老的问题,但自发布以来发生了很多变化:

  

最近,我开始练习Docker。基本上,我在Docker容器上运行一个C应用程序。现在,我想尝试使用Cloud Foundry,从而试图了解两者之间的区别。

...

  

我最后的选择是在Cloud Foundry中使用docker容器,但我想了解我是否能够实现上述目标。

在CF上使用Docker容器没有任何问题。如果您已经将所有内容设置为可以在Docker容器中运行,那么可以在CF上运行它可以为您提供又一个可以轻松部署工作负载的地方。

尽管这些要求很小,但是您的Docker容器有一些要求,因此值得检查一下以确保可以在CF上运行。

https://docs.cloudfoundry.org/devguide/deploy-apps/push-docker.html#requirements

  

无论如何,由于CF不适合该项目,因此我现在不从事此工作。这是一个SIP应用程序,CF仅接受HTTP / S请求。

好,房间里的大象。这不再是事实。 CF支持TCP路由。这些使您可以直接接收到应用程序的TCP通信。这意味着,不再只适合在CF上运行的HTTP / S应用程序。

使用TCP路由设置CF环境的说明:https://docs.cloudfoundry.org/adminguide/enabling-tcp-routing.html

使用TCP路由作为开发人员的说明:https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#create-route-with-port

  

现在,转到Cloud Foundry,我无法找到的第一件事是“如何部署C应用程序”,然后找到了一个C构建包和一个二进制构建包选项。

选择一个buildpack是重要的一步。该构建包将带走您的应用程序,并准备使其在CF上运行。一个C buildpack听起来很不错,因为它将带走您的源代码,构建并运行它,但由于您的C应用程序可能依赖于库,因此它将变得棘手。可能会或可能不会安装的库。

如果您要走这条路线,则可能需要使用CF的multi-buildpack支持。这使您可以运行多个buildpack。如果将其与Apt buildpack配对,则可以安装所需的软件包,以便在编译应用时可以使用任何必需的库。

https://docs.cloudfoundry.org/buildpacks/use-multiple-buildpacks.html

https://github.com/cloudfoundry/apt-buildpack

使用二进制buildpack是另一种选择。在这种情况下,您将在本地构建应用程序。也许在Docker容器中或在Ubuntu VM上(它需要与您的CF提供程序正在使用的堆栈(即cf stacks,目前为Ubuntu Trusty或Ubuntu Bionic)匹配)。一旦有了二进制或二进制+库集,就可以简单地cf push编译后的工件。二进制buildpack将“运行”(它实际上不执行任何操作),然后将使用您指定的命令启动您的应用。

我只有0.02美元,但是二进制buildpack可能是这两种选择中比较容易的一种。

  

我无法理解如何向云铸造容器提供启动脚本,或者简而言之如何实现对Docker的操作。

有几种方法可以做到这一点。首先是指定自定义启动命令。您可以使用cf push -c 'command'进行此操作。通常,这可以用来启动您的应用,例如'./my-app',但是您也可以使用它来执行其他操作。

例如:cf push -c './prep-my-app.sh && ./my-app'

或者甚至只是调用您的启动脚本:

例如:cf push -c './start-my-app.sh'

CF还支持.profile脚本。可以随您的应用程序一起推送(在您推送的文件的根目录中),并在应用程序启动之前由平台执行。

https://docs.cloudfoundry.org/devguide/deploy-apps/deploy-app.html#profile

通常,您希望使用.profile脚本,因为您希望让buildpack决定如何启动您的应用程序(设置-c将覆盖buildpack),但是在您的情况下对于C或二进制buildpack,该buildpack不可能做到这一点,因此无论如何您最终都必须设置一个自定义的启动命令。

对于这种特定情况,我建议使用cf push -c,因为它稍微容易一些,但是对于所有其他情况和与其他buildpack一起部署的应用程序,我建议使用.profile脚本。

希望有帮助!