README ¶
Kubernetes compose (Kompose)
kompose
is a tool to help users familiar with docker-compose
move to Kubernetes. It takes a Docker Compose file and translates it into Kubernetes objects.
kompose
is a convenience tool to go from local Docker development to managing your application with Kubernetes. We don't assume that the transformation from docker compose format to Kubernetes API objects will be perfect, but it helps tremendously to start Kubernetizing your application.
Download
Grab the latest release
Usage
Currently Kompose supports to transform either Docker Compose file (both of v1 and v2) and experimental Distributed Application Bundles into Kubernetes objects. There is a couple of sample files in the examples/
directory for testing. You will convert the compose or dab file to K8s objects with kompose convert
.
$ cd examples/
$ ls
docker-compose.yml docker-compose-bundle.dsb docker-gitlab.yml docker-voting.yml
$ kompose convert -f docker-gitlab.yml -y
file "redisio-svc.yaml" created
file "gitlab-svc.yaml" created
file "postgresql-svc.yaml" created
file "gitlab-deployment.yaml" created
file "postgresql-deployment.yaml" created
file "redisio-deployment.yaml" created
$ ls *.yaml
gitlab-deployment.yaml postgresql-deployment.yaml redis-deployment.yaml redisio-svc.yaml web-deployment.yaml
gitlab-svc.yaml postgresql-svc.yaml redisio-deployment.yaml redis-svc.yaml web-svc.yaml
You can try with a Docker Compose version 2 like this:
$ kompose convert --file docker-voting.yml
WARN[0000]: Unsupported key networks - ignoring
WARN[0000]: Unsupported key build - ignoring
file "worker-svc.json" created
file "db-svc.json" created
file "redis-svc.json" created
file "result-svc.json" created
file "vote-svc.json" created
file "redis-deployment.json" created
file "result-deployment.json" created
file "vote-deployment.json" created
file "worker-deployment.json" created
file "db-deployment.json" created
$ ls
db-deployment.json docker-compose.yml docker-gitlab.yml redis-deployment.json result-deployment.json vote-deployment.json worker-deployment.json
db-svc.json docker-compose-bundle.dsb docker-voting.yml redis-svc.json result-svc.json vote-svc.json worker-svc.json
Using --bundle, --dab
to specify a DAB file as below:
$ kompose convert --bundle docker-compose-bundle.dsb
WARN[0000]: Unsupported key networks - ignoring
file "redis-svc.json" created
file "web-svc.json" created
file "web-deployment.json" created
file "redis-deployment.json" created
Alternate formats
The default kompose
transformation will generate Kubernetes Deployments and Services, in json format. You have alternative option to generate yaml with -y
. Also, you can alternatively generate Replication Controllers objects, Deamon Sets, or Helm charts.
$ kompose convert
file "redis-svc.json" created
file "web-svc.json" created
file "redis-deployment.json" created
file "web-deployment.json" created
The *-deployment.json
files contain the Deployment objects.
$ kompose convert --rc -y
file "redis-svc.yaml" created
file "web-svc.yaml" created
file "redis-rc.yaml" created
file "web-rc.yaml" created
The *-rc.yaml
files contain the Replication Controller objects. If you want to specify replicas (default is 1), use --replicas
flag: $ kompose convert --rc --replicas 3 -y
$ kompose convert --ds -y
file "redis-svc.yaml" created
file "web-svc.yaml" created
file "redis-daemonset.yaml" created
file "web-daemonset.yaml" created
The *-daemonset.yaml
files contain the Daemon Set objects
If you want to generate a Chart to be used with Helm simply do:
$ kompose convert -c -y
file "web-svc.yaml" created
file "redis-svc.yaml" created
file "web-deployment.yaml" created
file "redis-deployment.yaml" created
chart created in "./docker-compose/"
$ tree docker-compose/
docker-compose
├── Chart.yaml
├── README.md
└── templates
├── redis-deployment.yaml
├── redis-svc.yaml
├── web-deployment.yaml
└── web-svc.yaml
The chart structure is aimed at providing a skeleton for building your Helm charts.
Unsupported docker-compose configuration options
Currently kompose
does not support the following Docker Compose options.
"build", "cap_add", "cap_drop", "cpuset", "cpu_shares", "cpu_quota", "cgroup_parent", "devices", "depends_on", "dns",
"dns_search", "domainname", "entrypoint", "env_file", "expose", "extends", "external_links", "extra_hosts", "hostname", "ipc",
"logging", "mac_address", "mem_limit", "memswap_limit", "network_mode", "networks", "pid", "security_opt", "shm_size",
"stop_signal", "volume_driver", "volumes_from", "uts", "read_only", "stdin_open", "tty", "user", "ulimits", "dockerfile",
"net", "args"
For example:
$ cat nginx.yml
nginx:
image: nginx
dockerfile: foobar
build: ./foobar
cap_add:
- ALL
container_name: foobar
$ kompose convert -f nginx.yml
WARN[0000] Unsupported key build - ignoring
WARN[0000] Unsupported key cap_add - ignoring
WARN[0000] Unsupported key dockerfile - ignoring
Bash completion
Running this below command in order to benefit from bash completion
$ PROG=kompose source script/bash_autocomplete
Building
Building with go
- You need
go
v1.5 - You need to set export
GO15VENDOREXPERIMENT=1
environment variable - If your working copy is not in your
GOPATH
, you need to set it accordingly.
$ go build -tags experimental -o kompose ./cli/main
You need -tags experimental
because the current bundlefile
package of docker/libcompose is still experimental.
Building multi-platform binaries with make
- You need
make
$ make binary
Contributing and Issues
kompose
is a work in progress, we will see how far it takes us. We welcome any pull request to make it even better.
If you find any issues, please file it.
Community, discussion, contribution, and support
We follow the Kubernetes community principles.
Learn how to engage with the Kubernetes community on the community page.
You can reach the maintainers of this project at:
- Slack: #kompose
Code of conduct
Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.