我目前正在尝试 Google App Engine灵活环境,尤其是允许您通过提供Dockerfile来构建custom runtimes的功能。
Docker提供了一个名为docker-compose
的非常好的功能,用于定义和运行多容器Docker应用程序。
现在的问题是,有没有什么方法可以在GAE中使用docker-compose的力量?如果答案是否定的,那么使用Docker在GAE灵活环境中部署多容器应用程序(例如Nginx + PHP-FPM + RabbitMQ + Elasticsearch + Redis + MongoDB,...)的最佳方法是什么?
答案 0 :(得分:10)
目前无法使用docker-compose在单个App Engine实例中拥有多个应用程序容器。然而,这似乎是设计上的。
如果您想拥有多个应用程序容器,则需要将它们部署为单独的App Engine服务。每个服务实例仍然只有一个应用程序容器,但每个服务可能有多个实例。这将为您提供独立扩展每个应用程序组件的灵活性。此外,如果容器中的应用程序要挂起,则它不会影响其他服务,因为它们将驻留在不同的VM中。 将每个组件部署为单独服务的另一个好处是,不需要为每个服务使用灵活的环境。对于一些非常小的任务,例如API后端或服务相对缓慢变化的Web内容,标准环境可能就足够了,并且在资源水平较低时可能更便宜。
由于您的一条评论提及获取实例IP,我认为您可能会发现服务间通信很有用。我不确定您希望使用VM实例IP的原因,但典型的用例可能是实例或服务之间的通信。要在没有实例IP的情况下执行此操作,最好的办法是使用相应的URL从一个服务向另一个服务发出HTTP请求。如果您有一个名为 web 的服务和一个名为 api 的服务,则网络服务可以向api.mycustomdomain.com
发出申请,其中您的申请是托管和 api 服务将收到一个请求,其中包含您的项目ID指定的X-Appengine-Inbound-Appid
标头。这可以作为将请求标识为来自您自己的应用程序的一种方式。
您提到了许多应用程序示例,包括NGinx,PHP-FPM,RabbitMQ等。使用custom runtimes的App Engine,只要响应来自端口8080的请求,您就可以部署任何容器来处理流量。请记住,该应用程序的主要目的是提供响应。实例应设计为快速启动和关闭以进行水平扩展。它们不应用于存储任何应用程序数据。这应该使用Cloud SQL,Cloud Datastore,BigQuery或您自己的Redis instance running on Compute Engine等工具保留在App Engine之外。
我希望这能澄清一些事情并回答你的问题。
答案 1 :(得分:-2)
您可以按照以下步骤在Google App Engine中使用docker-compose文件创建一个容器。 Follow link
您可以使用docker-compose文件构建自定义映像
docker-compose build
为本地版本创建标签
docker标签[SOURCE_IMAGE] [HOSTNAME] / [PROJECT-ID] / [IMAGE]
将图片推送到Google注册表
docker push [HOSTNAME] / [PROJECT-ID] / [IMAGE]
部署容器
gcloud应用程序部署--image-url = [HOSTNAME] / [PROJECT-ID] / [IMAGE]
请为运行的docker命令添加身份验证。