Google Cloud Run 中的 docker-compose.yml

Posted

技术标签:

【中文标题】Google Cloud Run 中的 docker-compose.yml【英文标题】:docker-compose.yml in Google Cloud Run 【发布时间】:2020-12-26 03:55:33 【问题描述】:

对于 docker-compose、Dockerfile 以及 GCP 的服务 Cloud Run 的工作原理,我有一个很大的理解问题。这使我无法在我拥有的项目中取得进展,而且我几乎没有东西可以尝试。

我有一个 docker-compose.yml 文件,内容如下:

version: '2'

services:

    # The Application
    app:
        container_name: laravel_app
        build:
            context: ./
            dockerfile: docker/app.dockerfile
        volumes:
            - ./storage:/var/www/storage

    # The Web Server
    web:
        container_name: nginx_server
        build:
            context: ./
            dockerfile: docker/web.dockerfile
        volumes:
        - ./storage/logs/:/var/log/nginx
        ports:
        - 8080:80

如您所见,它非常简单,两个服务一个用于使用 php 的应用程序,一个用于服务器。两者都有自己的 dockerfiles 并且构建是正确的。在本地一切正常,没有问题。

我现在想在 GCP 上的 Cloud Run 服务中部署这些服务。经过挖掘,我发现可能只能使用单个Dockerfile 部署服务。有没有办法将 docker-compose.yml 容器部署到 Cloud Run?我应该使用其他服务吗?

【问题讨论】:

【参考方案1】:

直接的答案是:不,它不会按原样工作!你必须更新你的包装。

首先,Cloud Run 不允许您挂载卷。你需要有一个无状态的容器。用这些文件构建你的容器,不要加载外部卷

其次,为了构建前端-后端架构,我不建议将静态部分托管在 Cloud Run 上。将静态文件存储在 Cloud Storage(前端)上并让动态处理(后端)在 Cloud Run 上会更好(更便宜、更快)。然后,在前面放一个HTTPS Global Loadbalancer, with CDN option activated. Configure 2 backend, one with a Cloud Storage backend for the front,第二个是serverless NEG for Cloud Run。

是的,这需要大量返工...或者您可以为此使用传统的 IaaS,使用虚拟机,但您失去了可扩展性和无服务器功能的所有优势。

【讨论】:

感谢您的确认!我发现找到一个明确的确认是非常乏味的,不,这是不可能的。

以上是关于Google Cloud Run 中的 docker-compose.yml的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Cloud 构建中的两个容器之间进行通信

GCP - 无法在 Cloud Run 中使用 Google Secret Manager (@google-cloud/secret-manager)

从 Google Cloud Run 托管应用程序触发的 Pub/Sub 消息需要很长时间

Google Cloud Tasks 无法向 Cloud Run 进行身份验证

监控 Google Cloud Run 内存使用情况

Google Cloud Run 最终用户身份验证