Introduction to Compose on Kubernetes for Docker Tokyo #27
Compose on Kubernetes
What is compose?
● Compose is a tool for defining and running multi-container Docker applications.
● Services and dependencies are defined in YAML file to configure application.
● Using single command, you create and start all the services from your
● Also works with swarm.
● Tool for developers.
https://docs.docker.com/compose/ Diagram Credit : cloudacademy
● Provides the flexibility to use a project name to isolate the environments from
● Compose preserves all volumes used by the services defined in the compose
file, thus no data is lost when the containers are recreated
● Containers which have changed are recreated, the containers whose state did
not change remain untouched
● Support for variables in the compose file, we can define variables in a .env file
and use them in the docker-compose file
$ docker-compose up -d
$ docker-compose down
$ docker-compose start
$ docker-compose stop
$ docker-compose build
$ docker-compose logs -f
$ docker-compose scale =4
$ docker-compose events
$ docker-compose exec bash
Docker compose commands
Why Compose on Kubernetes?
● The Kubernetes API is amazingly general
purpose – it exposes low-level primitives for
building the full range of distributed systems.
● There are more than 50 first-class objects in
the latest release, from Pods and
● This can lead to a verbosity in configuration,
which then needs to be managed by you,
kubernetes APIs Compose on Kubernetes
● Compose meanwhile isn’t an API but a
high-level tool focused on developer
● For the common case of a set of
interconnected web services, Compose
provides an abstraction that simplifies
● For everything else you can still drop down
to the raw Kubernetes API primitives
Architecture & Implementation
- Adds ‘stack’ object by extending kubernetes using API Aggregation.
- As ‘stack’ object is native, can be integrated with other k8s tools like skaffold.
Efficiency of Compose?
$ git clone https://github.com/microservices-demo/microservices-demo.git
$ cd deployment/kubernetes/manifests
$ (Get-ChildItem -Recurse -File | Get-Content | Measure-Object -line).Lines
$ cd ../../docker-compose
$ (Get-Content docker-compose.yml | Measure-Object -line).Lines
More than 5x code is reduced in compose as compared to raw k8s object description
Docker Desktop (Windows/Mac)
● Installed by default.
Deploying Compose on Kubernetes
● Guide for Azure AKS.
● Guide for GKE
● Guide for Minikube.
Try compose-on-kubernetes !