compose2fleet is a simple script that transforms Docker Compose files into either Docker or Rkt Fleet unit files.
Only the version 2 is supported.
- command
- container_name
- depends_on
- entrypoint
- environment
- networks
- ports
- restart
- volumes
$ compose2fleet -v
usage: compose2fleet [-h] [-d | -r] [-o OUTPUT] [-v] file
Convert Docker Compose files to CoreOS Fleet units
positional arguments:
file docker compose file
optional arguments:
-h, --help show this help message and exit
-d, --docker select docker as the container runtime
-r, --rkt select rkt as the container runtime
-o OUTPUT, --output OUTPUT
select the output directory
-v show program's version number and exit
Given a docker-compose.yml file with either one or several services defined, compose2fleet will generate one .service unit file for each service. In case of using rkt as the container runtime, one .conf file will be generated for each user defined network.
version: '2'
services:
grafana:
image: jfusterm/grafana:latest
container_name: grafana
restart: on-failure
ports:
- "3000:3000"
volumes:
- /opt/grafana/data:/grafana/data
- /opt/grafana/logs:/grafana/logs:ro
depends_on:
- influxdb
- prometheus
influxdb:
image: jfusterm/influxdb:0.13.0
container_name: influxdb
restart: on-failure
ports:
- "2003:2003"
- "8083:8083"
- "8086:8086"
volumes:
- influxdb:/influxdb
prometheus:
image: jfusterm/prometheus:0.20.0
container_name: prometheus
restart: on-failure
ports:
- "9090:9090"
volumes:
- /prometheus
volumes:
influxdb:
networks:
gip_net:
driver: bridge
Transforming the docker-compose.yml using Docker as the container runtime.
$ compose2fleet -d docker-compose.yml
Docker service created: grafana.service
Docker service created: prometheus.service
Docker service created: influxdb.service
- Grafana service
[Unit]
Description=grafana
After=docker.service influxdb.service prometheus.service
Wants=influxdb.service prometheus.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker rm -f grafana
ExecStartPre=/usr/bin/docker pull jfusterm/grafana:latest
ExecStart=/usr/bin/docker run \
--name grafana \
-p 3000:3000 \
--restart on-failure \
-v /opt/grafana/data:/grafana/data \
-v /opt/grafana/logs:/grafana/logs:ro \
jfusterm/grafana:latest
ExecStop=/usr/bin/docker stop grafana
[X-Fleet]
MachineOf=influxdb.service
MachineOf=prometheus.service
- Prometheus service
[Unit]
Description=prometheus
After=docker.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker rm -f prometheus
ExecStartPre=/usr/bin/docker pull jfusterm/prometheus:0.20.0
ExecStart=/usr/bin/docker run \
--name prometheus \
-p 9090:9090 \
--restart on-failure \
-v /prometheus \
jfusterm/prometheus:0.20.0
ExecStop=/usr/bin/docker stop prometheus
[X-Fleet]
- InfluxDB service
[Unit]
Description=influxdb
After=docker.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker rm -f influxdb
ExecStartPre=/usr/bin/docker pull jfusterm/influxdb:0.13.0
ExecStart=/usr/bin/docker run \
--name influxdb \
-p 2003:2003 \
-p 8083:8083 \
-p 8086:8086 \
--restart on-failure \
-v influxdb:/influxdb \
jfusterm/influxdb:0.13.0
ExecStop=/usr/bin/docker stop influxdb
[X-Fleet]
Transforming the docker-compose.yml using rkt as the container runtime.
$ compose2fleet -r gip.yaml
Created rkt network: gip_net.conf
Rkt service created: prometheus.service
Rkt service created: grafana.service
Rkt service created: influxdb.service
A .conf file will be generated for each user defined network in the docker-compose.yml file. The network files should be put under etc/rkt/net.d/
{
"name": "gip_net",
"type": "bridge",
"ipam": {
"type": "host-local",
"subnet": "10.42.0.0/16"
}
}
- Grafana service
[Unit]
Description=grafana
After=network-online.target influxdb.service prometheus.service
Wants=influxdb.service prometheus.service
Requires=network-online.target
[Service]
ExecStartPre=/usr/bin/rkt fetch --insecure-options=image docker://jfusterm/grafana:latest
ExecStart=/usr/bin/rkt run \
--hostname grafana \
--port 3000-tcp:3000 \
--volume volume-opt-grafana-data,kind=host,source=/opt/grafana/data,readOnly=false \
--mount volume=volume-opt-grafana-data,target=/grafana/data \
--volume volume-opt-grafana-logs,kind=host,source=/opt/grafana/logs,readOnly=true \
--mount volume=volume-opt-grafana-logs,target=/grafana/logs \
docker://jfusterm/grafana:latest
ExecStopPost=/usr/bin/rkt gc --grace-period=0
Restart=on-failure
[X-Fleet]
MachineOf=influxdb.service
MachineOf=prometheus.service
- Prometheus service
[Unit]
Description=prometheus
After=network-online.target
Requires=network-online.target
[Service]
ExecStartPre=/usr/bin/rkt fetch --insecure-options=image docker://jfusterm/prometheus:0.20.0
ExecStart=/usr/bin/rkt run \
--hostname prometheus \
--port 9090-tcp:9090 \
docker://jfusterm/prometheus:0.20.0
ExecStopPost=/usr/bin/rkt gc --grace-period=0
Restart=on-failure
[X-Fleet]
- Influxdb service
[Unit]
Description=influxdb
After=network-online.target
Requires=network-online.target
[Service]
ExecStartPre=/usr/bin/rkt fetch --insecure-options=image docker://jfusterm/influxdb:0.13.0
ExecStart=/usr/bin/rkt run \
--hostname influxdb \
--port 2003-tcp:2003 \
--port 8083-tcp:8083 \
--port 8086-tcp:8086 \
--volume influxdb,kind=empty,readOnly=false \
--mount volume=influxdb,target=/influxdb \
docker://jfusterm/influxdb:0.13.0
ExecStopPost=/usr/bin/rkt gc --grace-period=0
Restart=on-failure
[X-Fleet]
You can run compose2fleet in a Docker container
$ docker pull jfusterm/compose2fleet
$ docker run --rm -v $(pwd):/data/ jfusterm/compose2fleet docker-compose.yml
Download the latest release and execute
$ python3 setup.py install