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

时间:2020-04-11 13:57:28

标签: docker google-cloud-platform docker-compose google-kubernetes-engine google-cloud-run

我是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推送到Google Cloud。

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

FROM docker/compose

WORKDIR /opt
COPY docker-compose.yml .

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

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

  1. 云运行-无法运行,因为我找不到为/var/run/docker.sock指定挂载卷的方法
  2. Kubernetes-我安装了docker.sock,但是在git服务中的/app只读的日志中却不断出现错误
  3. 计算引擎-与上述相同的错误

我不想通过将所有本地文件复制到其中然后上载来创建容器,因为依赖关系可能真的很大,因此要放入一个沉重的容器。

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

这可以通过在项目根目录中创建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来构建您的容器。