一尘不染

在Google App Engine中使用Docker compose

docker

我目前正在尝试使用 Google App Engine灵活环境 ,特别是该功能允许您通过提供Dockerfile
来构建自定义运行时

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

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


阅读 278

收藏
2020-06-17

共1个答案

一尘不染

目前无法使用docker-compose在单个App Engine实例中具有多个应用程序容器。但是,这似乎是设计使然。

独立扩展应用程序组件

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

组件之间的通讯

由于您的评论之一提到获取实例IP,因此我认为您可能会发现服务间通信很有用。我不确定您要使用VM实例IP的原因是什么,但是典型的用例可能是在实例或服务之间进行通信。要在没有实例IP的情况下执行此操作,最好的选择是仅使用适当的URL将HTTP请求从一项服务发送到另一项服务。如果您有一个名为
web 的服务和一个名为 api 的服务,则该 Web
服务可以向api.mycustomdomain.com托管您的应用程序的位置发出请求,并且 api 服务将收到X-Appengine- Inbound-Appid带有您的项目ID指定的标头的请求。这可以用作将请求标识为来自您自己的应用程序的方式。

使用Docker的多容器应用程序

您提到了许多应用程序示例,包括NGinx,PHP-
FPM,RabbitMQ等。通过使用自定义运行时的 App Engine
,您可以部署任何容器来处理流量,只要它能够响应来自端口8080的请求即可。请记住,该应用程序的目的是提供响应。实例应设计为可快速启动和关闭,以实现水平扩展。它们不应用于存储任何应用程序数据。使用诸如Cloud
SQL
Cloud
Datastore
,BigQuery或您在Compute
Engine上运行
的自己的Redis实例之类的工具,该变量应保留在App
Engine之外。

我希望这可以澄清一些事情并回答您的问题。

2020-06-17