Skip to content

micahhausler/container-transform

Folders and files

NameName
Last commit message
Last commit date
Oct 29, 2017
May 14, 2017
Sep 3, 2016
Jul 6, 2015
Dec 29, 2014
May 14, 2017
Feb 7, 2016
May 14, 2017
Feb 7, 2016
May 8, 2015
Sep 8, 2016
Feb 8, 2016
Dec 24, 2016

Repository files navigation

https://travis-ci.org/micahhausler/container-transform.png https://coveralls.io/repos/micahhausler/container-transform/badge.png?branch=master Documentation Status

container-transform

container-transform is a small utility to transform various docker container formats to one another.

Currently, container-transform can parse and convert:

  • Kubernetes Pod specs
  • ECS task definitions
  • Docker-compose configuration files
  • Marathon Application Definitions or Groups of Applications
  • Chronos Task Definitions

and it can output to:

  • Systemd unit files

Examples

Compose to Kubernetes

$ cat docker-compose.yaml
version: '2'
services:
  etcd:
    cpu_shares: 102.4
    entrypoint: /usr/local/bin/etcd -data-dir /var/etcd/data -listen-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001
      -advertise-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 -initial-cluster-token
      skydns-etcd
    image: gcr.io/google_containers/etcd-amd64:2.2.1
    mem_limit: 524288000b
  healthz:
    command: -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
      -port=8080
    cpu_shares: 10.24
    image: gcr.io/google_containers/exechealthz:1.0
    mem_limit: 20971520b
    ports:
    - '8080'
  kube2sky:
    command: --kubecfg-file=/etc/kubernetes/worker-kubeconfig.yaml --domain=cluster.local
    cpu_shares: 102.4
    image: gcr.io/google_containers/kube2sky:1.14
    mem_limit: 209715200b
    volumes:
    - /usr/share/ca-certificates:/etc/ssl/certs
    - /etc/kubernetes/worker-kubeconfig.yaml:/etc/kubernetes/worker-kubeconfig.yaml:ro
    - /etc/kubernetes/ssl:/etc/kubernetes/ssl:ro
  skydns:
    command: -machines=http://127.0.0.1:4001 -addr=0.0.0.0:53 -ns-rotate=false -domain=cluster.local.
    cpu_shares: 102.4
    image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c
    mem_limit: 209715200b
    ports:
    - 53/udp
    - '53'
$ container-transform -i compose -o kubernetes docker-compose.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: null
    version: latest
  name: null
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: null
      version: latest
  template:
    metadata:
      labels:
        app: null
        version: latest
    spec:
      containers:
      - command:
        - /usr/local/bin/etcd
        - -data-dir
        - /var/etcd/data
        - -listen-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -advertise-client-urls
        - http://127.0.0.1:2379,http://127.0.0.1:4001
        - -initial-cluster-token
        - skydns-etcd
        image: gcr.io/google_containers/etcd-amd64:2.2.1
        name: etcd
        resources:
          limits:
            cpu: 100.0m
            memory: 500Mi
      - args:
        - -cmd=nslookup
        - kubernetes.default.svc.cluster.local
        - 127.0.0.1
        - '>/dev/null'
        - -port=8080
        image: gcr.io/google_containers/exechealthz:1.0
        name: healthz
        ports:
        - containerPort: 8080
          protocol: TCP
        resources:
          limits:
            cpu: 10.0m
            memory: 20Mi
      - args:
        - --kubecfg-file=/etc/kubernetes/worker-kubeconfig.yaml
        - --domain=cluster.local
        image: gcr.io/google_containers/kube2sky:1.14
        name: kube2sky
        resources:
          limits:
            cpu: 100.0m
            memory: 200Mi
        volumeMounts:
        - mountPath: /etc/ssl/certs
          name: usr-share-ca-certificates
        - mountPath: /etc/kubernetes/worker-kubeconfig.yaml
          name: etc-kubernetes-worker-kubeconfig.yaml
          readOnly: true
        - mountPath: /etc/kubernetes/ssl
          name: etc-kubernetes-ssl
          readOnly: true
      - args:
        - -machines=http://127.0.0.1:4001
        - -addr=0.0.0.0:53
        - -ns-rotate=false
        - -domain=cluster.local.
        image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c
        name: skydns
        ports:
        - containerPort: 53
          protocol: UDP
        - containerPort: 53
          protocol: TCP
        resources:
          limits:
            cpu: 100.0m
            memory: 200Mi
      volumes:
      - hostPath:
          path: /etc/kubernetes/ssl
        name: etc-kubernetes-ssl
      - hostPath:
          path: /etc/kubernetes/worker-kubeconfig.yaml
        name: etc-kubernetes-worker-kubeconfig.yaml
      - hostPath:
          path: /usr/share/ca-certificates
        name: usr-share-ca-certificates

Compose to ECS

$ cat docker-compose.yml | container-transform  -v
{
    "family": "python-app",
    "volumes": [
        {
            "name": "host_logs",
            "host": {
                "sourcePath": "/var/log/myapp"
            }
        }
    ],
    "containerDefinitions": [
        {
            "memory": 1024,
            "image": "postgres:9.3",
            "name": "db",
            "essential": true
        },
        {
            "memory": 128,
            "image": "redis:latest",
            "name": "redis",
            "essential": true
        },
        {
            "name": "web",
            "memory": 64,
            "command": [
                "uwsgi",
                "--json",
                "uwsgi.json"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "host_logs",
                    "containerPath": "/var/log/uwsgi/"
                }
            ],
            "environment": [
                {
                    "name": "AWS_ACCESS_KEY_ID",
                    "value": "AAAAAAAAAAAAAAAAAAAA"
                },
                {
                    "name": "AWS_SECRET_ACCESS_KEY",
                    "value": "1111111111111111111111111111111111111111"
                }
            ],
            "essential": true
        }
    ]
}
Container web is missing required parameter "image".
Container web is missing required parameter "cpu".

Quick Help

Usage: container-transform [OPTIONS] [INPUT_FILE]

  container-transform is a small utility to transform various docker
  container formats to one another.

  Default input type is compose, default output type is ECS

  Default is to read from STDIN if no INPUT_FILE is provided

  All options may be set by environment variables with the prefix "CT_"
  followed by the full argument name.

Options:
  -i, --input-type [ecs|compose|marathon|chronos|kubernetes]
  -o, --output-type [ecs|compose|systemd|marathon|chronos|kubernetes]
  -v, --verbose / --no-verbose    Expand/minify json output
  -q, --quiet                     Silence error messages
  --version                       Show the version and exit.
  -h, --help                      Show this message and exit.

Docker Image

To get the docker image, run:

docker pull micahhausler/container-transform:latest

To run the docker image:

docker run --rm -v $(pwd):/data/ micahhausler/container-transform  docker-compose.yml

# or
cat docker-compose.yml | docker run --rm -i micahhausler/container-transform

Installation

To install the latest release (Python 3 only), type:

pip install container-transform

To install the latest code directly from source, type:

pip install git+git://github.com/micahhausler/container-transform.git

Documentation

Full documentation is available at http://container-transform.readthedocs.org

License

MIT License (see LICENSE)

About

Transforms docker-compose, ECS, and Marathon configurations

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages