如何使用 docker-compose 将容器部署到谷歌云?

Posted

技术标签:

【中文标题】如何使用 docker-compose 将容器部署到谷歌云?【英文标题】:How to deploy container using docker-compose to google cloud? 【发布时间】:2020-07-24 05:51:42 【问题描述】:

我对 GCP 很陌生,并且主要使用 AWS。我目前正在尝试使用 GCP 并希望使用 docker-compose 部署容器。

我设置了一个非常基本的 docker-compose.yml 文件如下:

# docker-compose.yml
version: '3.3'

services:
  git:
    image: alpine/git
    volumes:
      - $PWD:/git
    command: "clone https://github.com/php-DI/demo.git"

  composer:
    image: composer
    volumes:
      - $PWD/demo:/app
    command: "composer install"
    depends_on:
      - git

  web:
    image: php:7.4-apache
    ports:
      - "8080:$PORT:-80"
      - "8000:$PORT:-8000"
    volumes:
      - $PWD/demo:/var/www/html
    command: php -S 0.0.0.0:8000 -t /var/www/html
    depends_on:
      - composer

所以容器会从 git 获取代码,然后使用 composer 安装依赖,最后在 8000 端口上可用。

在我的机器上,运行 docker-compose up 可以完成所有工作。但是如何将这个 docker-compose 推送到谷歌云。

我尝试使用docker/compose 映像和 Dockerfile 构建容器,如下所示:

FROM docker/compose

WORKDIR /opt
COPY docker-compose.yml .

WORKDIR /app
CMD docker-compose -f /opt/docker-compose.yml up web

然后将容器推送到注册表。从那里我尝试部署到:

    云运行 - 没有工作,因为我找不到为/var/run/docker.sock 指定挂载卷的方法 Kubernetes - 我安装了 docker.sock,但我在日志中不断收到错误消息,指出来自 git 服务的 /app 是只读的 计算引擎 - 与上述相同的错误

我不想通过将所有本地文件复制到其中然后上传来制作容器,因为依赖项可能非常大,因此要推送一个沉重的容器。

我有一个工作的 docker-compose,只想在 GCP 上使用它。最简单的方法是什么?

【问题讨论】:

您好,您找到好的解决方案了吗? 【参考方案1】:

这可以通过在项目根目录中创建一个 cloudbuild.yaml 文件来完成。 将以下步骤添加到 cloudbuild.yaml:

  steps:
  # running docker-compose
  - name: 'docker/compose:1.26.2'
    args: ['up', '-d']

在 Google Cloud Platform > Cloud Builder 上:将构建配置的文件类型配置为 Cloud Build 配置文件(yaml 或 json),输入文件位置:cloudbuild.yaml

如果调用触发器的存储库事件设置为“推送到分支”,则 Cloud Build 将启动 docker-compose.yml 来构建您的容器。

【讨论】:

Cloud Builder 将在哪里部署这个 docker-compose 应用程序?我了解 Cloud Builder 只是在构建,而不是在运行它。 cloud.google.com/build/docs/deploying-builds/deploy-cloud-run【参考方案2】:

看看Kompose。它可以帮助您将 docker compose 指令转换为 Kuberenetes 特定的部署和服务。然后,您可以将 Kubernetes 文件应用于您的 GKE 集群。请注意,您必须先构建容器并存储在 Container Registry 中,然后相应地更新服务定义中的图像标签。

【讨论】:

以上是关于如何使用 docker-compose 将容器部署到谷歌云?的主要内容,如果未能解决你的问题,请参考以下文章

将多个 docker 容器部署到 AWS ECS

无法将多容器 docker 部署到 ElasticBeanstalk

docker-compose 一键部署lnmp

docker-compose概述与编排部署

docker-compose概述与编排部署

如何将maven多模块spring boot部署到docker容器