在Google App Engine中使用Docker进行组合

我目前正在试用Google App Engine的灵活环境 ,特别是允许您通过提供Dockerfile来构build自定义运行时的function。

Docker提供了一个非常好的function,称为docker-compose用于定义和运行多容器Docker应用程序。

现在的问题是,有没有办法在GAE内使用docker-compose的力量? 如果答案是否定的,那么在使用Docker的GAE灵活环境中,部署多容器应用程序(例如Nginx + PHP-FPM + RabbitMQ + Elasticsearch + Redis + MongoDB等)的最佳方法是什么?

目前不可能使用docker-compose在一个App Engine实例中拥有多个应用程序容器。 这看起来似乎是由devise。

独立扩展应用程序组件

如果您希望拥有多个应用程序容器,则需要将它们部署为独立的App Engine服务。 每个服务实例仍然只有一个应用程序容器,但每个服务可能有多个实例。 这将使您能够灵活地寻求独立扩展每个应用程序组件。 另外,如果容器中的应用程序挂起,不会影响其他服务,因为它们驻留在不同的虚拟机中。 将每个组件部署为独立服务的另一个好处是不需要为每个服务使用灵活的环境。 对于一些非常小的任务,如API后端或服务相对缓慢的Web内容,标准环境可能就足够了,在低资源水平下可能会更便宜。

组件之间的通信

由于您的评论之一提到获取实例IP,我想你可能会发现有用的服务间通信。 我不确定您希望使用VM实例IP的原因,但是典型的用例可能是在实例或服务之间进行通信。 要做到这一点没有实例IP,最好的办法就是简单地使用适当的url来发送从一个服务到另一个服务的HTTP请求。 如果您有一个名为web的服务和一个名为api的服务,则Web服务可以向托pipe应用程序的api.mycustomdomain.com发出请求,并且api服务将收到一个请求,其中指定了X-Appengine-Inbound-Appid标头你的项目ID。 这可以用来识别来自您自己的应用程序的请求。

使用Docker的多容器应用程序

您提到了许多应用程序的示例,包括NGinx,PHP-FPM,RabbitMQ等。使用自定义运行时的 App Engine,只要响应来自端口8080的请求,就可以部署任何容器来处理stream量。请记住,应用程序的目的是为服务响应。 应该devise实例来快速启动和closures,以便横向扩展。 他们不应该被用来存储任何应用程序数据。 这应该保持在App Engine之外,使用Cloud SQL , Cloud Datastore ,BigQuery或在计算引擎上运行的自己的Redis实例 。

我希望这个澄清一些事情,并回答你的问题。