当前位置: 首页 > 知识库问答 >
问题:

在Google App Engine中使用Docker compose

阎嘉荣
2023-03-14

我目前正在尝试谷歌应用引擎灵活的环境,特别是允许您通过提供Dockerfile来构建自定义运行时的功能。

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

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

共有2个答案

戚高洁
2023-03-14

您可以按照以下步骤在谷歌应用引擎中创建一个带有docker-comuse文件的容器

>

  • 您可以使用docker-comuse文件构建自定义映像

    Docker-撰写构建

    为本地构建创建标记

    Docker标签[SOURCE_IMAGE][主机名]/[PROJECT-ID]/[图像]

    将图像推送到谷歌注册表

    docker push[HOSTNAME]/[PROJECT-ID]/[IMAGE]

    部署容器

    gcloud应用程序部署——图像url=[HOSTNAME]/[PROJECT-ID]/[image]

    请为要运行的docker命令添加auth。

  • 璩无尘
    2023-03-14

    目前不可能使用docker compose在单个应用程序引擎实例中拥有多个应用程序容器。然而,这似乎是有意为之。

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

    由于您的评论中提到了获取实例IP,我想您可能会发现服务间通信很有用。我不确定您希望使用VM实例IP的原因,但典型的用例可能是在实例或服务之间通信。要在没有实例IP的情况下实现这一点,您最好使用适当的url从一个服务向另一个服务发出HTTP请求。如果您有一个名为Web的服务和一个名为api的服务,Web服务可以向托管您的应用程序的api.mycustomdomain.com发出请求,api服务将收到一个请求,该请求带有您的项目ID指定的X-Appgine-Inbing-Appid头。这可以作为一种方法,将请求识别为来自您自己的应用程序。

    您提到了许多应用程序的例子,包括NGinx、PHP-FPM、RabbitMQ等。使用使用自定义运行时的应用程序引擎,您可以部署任何容器来处理流量,只要它响应来自端口8080的请求。请记住,应用程序的主要目的是提供响应。这些实例应该被设计成能够快速启动和关闭,以便水平扩展。它们不应该用于存储任何应用程序数据。这应该使用云SQL、云数据存储、BigQuery或您自己在计算引擎上运行的Redis实例等工具保持在应用程序引擎之外。

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

     类似资料:
    • 我正在尝试运行Jersey的HelloWorld示例,但失败了。这就是我尝试过的。 我已经设置我的这样 我已经设置了我的像这样, 我的服务设置是这样的, 我正在使用这些libs 这是这个问题的视频http://screencast.com/t/oIYKMQw1x 知道我做错了什么吗? 谢谢 堆栈跟踪 Apr 23,2012 12:19:27 AMcom.sun.jersey.server.impl

    • 我正在尝试将一个基于PHP的API从共享主机移植到Google应用程序引擎。我下载了PHPSDK,在启动器中创建了一个新的应用程序,在PHP中启用了cURL。ini(使用),现在我得到这个错误: 如果我向curl_init()添加反斜杠(告诉它不要使用MyNamespace),我会得到这个: 除了启用cURL_lite()(稍后我可能会解决这个问题,因为它不支持我需要的cURL选项),我如何解决这

    • PS:对不起我的英语,我是一个绝望的法国人,需要帮助

    • 我一直试图获得一个简单的web操作来向API发出一个经过身份验证的get请求(我已经从示例代码中删除了实际的url和秘密)。 我已经在本地成功地运行了这一点,但是当我测试web动作时,它只是在记录“调用Axios”之后死亡。 它不会报告错误,我尝试实现一个承诺,认为线程在api响应之前就结束了,但没有效果。有什么线索吗?

    • 问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope

    • 我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?

    • 问题内容: 我有一个简单的Entitly类,(和单独类中的字段)。然后,我使用Spring Data()访问数据库(MySql),使用常规ID,查询可以正常工作,无论是Spring生成的查询还是我自己编写的查询。与我没有设法创建正确的查询。我想做的是选择所有id(发生某些情况的EmbeddedId字段之一),这里有一些代码示例,也许有人会知道如何解决它。 实体类: EmbeddedId类: 和存储

    • 问题内容: 我正在研究控制建筑物的光和热的项目。后端(用Java编写)将在Mac Mini上运行,并且应该可以通过SOAP进行访问。 我希望将此项目的复杂性降至最低,因为我不希望每个使用它的人都必须设置应用程序服务器。所以到目前为止,我一直使用javax.xml.ws.Endpoint: 这样的效果出奇的好(嘿,您什么时候最后一次只用3行代码看到Java中的东西?),但是现在我正在寻找一种使用HT