Use the Kubernetes tool Kompose to start multiple containers in a single pod

10/12/2017

I have been search google for a solution to the below problem for longer than I care to admit.

I have a docker-compose.yml file, which allows me to fire up an ecosystem of 2 containers on my local machine. Which is awesome. But I need to be able to deploy to Google Container Engine (GCP). To do so, I am using Kubernetes; deploying to a single node only.

In order to keep the deploying process simple, I am using kompose, which allows me to deploy my containers on Google Container Engine using my original docker-compose.yml. Which is also very cool. The issue is that, by default, Kompose will deploy each docker service (I have 2) in seperate pods; one container per pod. But I really want all containers/services to be in the same pod.

I know there are ways to deploy multiple containers in a single pod, but I am unsure if I can use Kompose to accomplish this task.

Here is my docker-compose.yml:

version: "2"
services:
  server:
    image: ${IMAGE_NAME}
    ports:
      - "3000"
    command: node server.js
    labels:
      kompose.service.type: loadbalancer
  ui:
    image: ${IMAGE_NAME}
    ports:
      - "3001"
    command: npm run ui
    labels:
      kompose.service.type: loadbalancer
    depends_on:
      - server

Thanks in advance.

-- jcgh582
docker
docker-compose
google-cloud-platform
kubernetes

1 Answer

10/12/2017

The thing is, that neither dose docker-compose launch them like this. They are completely separate. It means, for example, that you can have two containers listening on port 80, cause they are independent. If you try to pack them into same pod you will get port conflict and end up with a mess. The scenario you want to achieve should be achieved on your Dockerfile level to make any sense (although fat [supervisor based] containers can be considered an antipattern in many cases), in turn making your compose obsolete...

IMO you should embrace how things are, cause it does not make sense to map docker-compose defined stack to single pod.

-- Radek 'Goblin' Pieczonka
Source: StackOverflow