'How to deploy container using docker-compose to google cloud?

i'm quite new to GCP and been using mostly AWS. I am currently trying to play around with GCP and want to deploy a container using docker-compose.

I set up a very basic docker-compose.yml file as follows:

# 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

So the container will get the code from git, then install the dependencies using composer and finally be available on port 8000.

On my machine, running docker-compose up does everything. However how can push this docker-compose to google cloud.

I have tried building a container using the docker/compose image and a Dockerfile as follows:

FROM docker/compose

WORKDIR /opt
COPY docker-compose.yml .

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

Then push the container to the registry. And from there i tried deploying to:

  1. cloud run - did not work as i could not find a way to specify mounted volume for /var/run/docker.sock
  2. Kubernetes - i mounted the docker.sock but i keep getting an error in the logs that /app from the git service is read only
  3. compute engine - same error as above

I don't want to make a container by copying all local files into it then upload, as the dependencies could be really big thus making a heavy container to push.

I have a working docker-compose and just want to use it on GCP. What's the easiest way?



Solution 1:[1]

This can be done by creating a cloudbuild.yaml file in your project root directory. Add the following step to cloudbuild.yaml:

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

On Google Cloud Platform > Cloud Builder : configure the file type of your build configuration as Cloud Build configuration file (yaml or json), enter the file location : cloudbuild.yaml

If the repository event that invokes trigger is set to "push to a branch" then Cloud Build will launch docker-compose.yml to build your containers.

Solution 2:[2]

Take a look at Kompose. It can help you convert the docker compose instructions into Kuberenetes specific deployment and services. You can then apply the Kubernetes files against your GKE Clusters. Note that you will have to build the containers and store in Container Registry first and update the image tag in service definitions accordingly.

Solution 3:[3]

If you are trying to setup same as on-premise VM in GCE, you can install these and run. Ref: https://dev.to/calvinqc/the-easiest-docker-docker-compose-setup-on-compute-engine-1op1

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ayoub Ben
Solution 2 Agasthi
Solution 3 Valsaraj Viswanathan