No description
Find a file
Julien BIANCHI 01c9ac26c6 Merge pull request #14 from pmsipilot/deploy-docker
chore: Automatically deploy the docker image
2017-06-01 19:31:16 +02:00
bin Fix CS 2016-08-05 20:51:29 +02:00
ci chore: Automatically deploy the docker image 2017-06-01 19:23:22 +02:00
resources Add missing elements to the readme 2016-08-06 14:43:32 +02:00
spec Fix CS again 2016-08-05 20:53:13 +02:00
src Apply fixes from StyleCI 2017-05-30 20:47:20 +00:00
.gitignore Add CS Fixer 2016-08-05 20:40:29 +02:00
.php_cs Fix CS 2016-08-05 20:51:29 +02:00
.travis.yml chore: Automatically deploy the docker image 2017-06-01 19:23:22 +02:00
CHANGELOG.md Avoid duplicating edges when there is multiple extended services 2017-01-05 13:02:49 +01:00
composer.json Add CS Fixer 2016-08-05 20:40:29 +02:00
composer.lock Avoid duplicating edges when there is multiple extended services 2017-01-05 13:02:49 +01:00
Dockerfile Add execution permission 2016-08-09 16:41:17 +02:00
LICENSE Initial source import 2016-08-05 16:56:36 +02:00
Makefile Fix CS 2016-08-05 20:51:29 +02:00
README.md fix: Be more clear about docker usage 2017-06-01 18:27:42 +02:00

docker-compose-viz

Build Status StyleCI Average time to resolve an issue Percentage of issues still open Docker Stars Docker Pulls

How to use

Docker

Considering the current working directory is where your docker-compose.yml file is located:

docker run --rm -it --name dcv -v $(pwd):/input pmsipilot/docker-compose-viz render -m image docker-compose.yml

This will generate the docker-compose.png file in the current working directory.

PHP

Before you start, make sure you have:

  • Composer installed,
  • PHP 7 installed,
  • GraphViz installed (see below for a guide on how to install it)
git clone https://github.com/pmsipilot/docker-compose-viz.git

make vendor
# Or
composer install --prefer-dist 

bin/dcv

Install GraphViz

  • On MacOS: brew install graphviz
  • On Debian: sudo apt-get install graphviz

Usage

render [options] [--] [<input-file>]

Arguments:
  input-file                         Path to a docker compose file [default: "./docker-compose.yml"]

Options:
  -o, --output-file=OUTPUT-FILE      Path to a output file (Only for "dot" and "image" output format) [default: "./docker-compose.dot" or "./docker-compose.png"]
  -m, --output-format=OUTPUT-FORMAT  Output format (one of: "dot", "image", "display") [default: "display"]
      --only=ONLY                    Display a graph only for a given services (multiple values allowed)
  -f, --force                        Overwrites output file if it already exists
      --no-volumes                   Do not display volumes
  -r, --horizontal                   Display a horizontal graph

How to read the graph

Links (from services.<service>.links) are displayed as plain arrows pointing to the service that declares the link:

links

If we look at the link between mysql and ambassador, it reads as follow: "mysql is known as mysql in ambassador." If we look at the link between ambassador and logs, it reads as follow: "ambassador is known as logstash in logs."

External links are displayed using the same shapes but are grayed:

external_links

Volumes

Volumes (from services.<service>.volumes_from) are displayed as dashed arrows pointing to the service that uses the volumes:

volumes

If we look at the link between logs and api, it reads as follow: "api uses volumes from logs."

Volumes (from services.<service>.volumes) are displayed as folders with the host directory as label and are linked to the service that uses them dashed arrows.

If we look at the link between ./api and api, it reads as follow: "the host directory ./apiis mounted as a read-write folder on /src in api." Bidirectional arrows mean the directory is writable from the container.

If we look at the link between ./etc/api/php-fpm.d and api, it reads as follow: "the host directory ./etc/api/php-fpm.dis mounted as a read-only folder on /usr/local/etc/php-fpm.d in api." Unidirectional arrows mean the directory is not writable from the container.

Dependencies

Dependencies (from services.<service>.depends_on) are displayed as dotted arrows pointing to the service that declares the dependencies:

dependencies

If we look at the link between mysql and logs, it reads as follow: "mysql depends on logs."

Ports

Ports (from services.<service>.ports) are displayed as circle and are linked to containers using plain arrows pointing to the service that declares the ports:

ports

If we look at the link between port 2480 and orientdb, it reads as follow: "traffic coming to host port 2480 will be routed to port 2480 of orientdb." If we look at the link between port 2580 and elk, it reads as follow: "traffix coming to host port 2580 will be routed to port 80 of elk."

Extends

Extended services (from services.<service>.extends) are displayed as components (just like normal services). The links between them and the extending services are displayed as inverted arrows:

extends

If we look at the link between mysql and db, it reads as follow: "mysql extends service db".

Networks

Networks (from networks.<network>) are displayed as pentagons. The links between them and services are displayed as plain arrows pointing to the network:

networks

If we look at the link between mysql and the global network, it reads as follow: "mysql is known as mysql, db and reldb in the global network.

The legacy network is an external so it's displayed as a grayed pentagone.

Examples

dot renderer

digraph G {
  graph [pad=0.5]
  "front" [shape="component"]
  "http" [shape="component"]
  2380 [shape="circle"]
  "ambassador" [shape="component"]
  "mysql" [shape="component"]
  "orientdb" [shape="component"]
  "elk" [shape="component"]
  "api" [shape="component"]
  "piwik" [shape="component"]
  "logs" [shape="component"]
  "html" [shape="component"]
  2580 [shape="circle"]
  2480 [shape="circle"]
  "http" -> "front" [style="solid"]
  2380 -> "front" [style="solid" label=80]
  "mysql" -> "ambassador" [style="solid"]
  "orientdb" -> "ambassador" [style="solid"]
  "elk" -> "ambassador" [style="solid"]
  "api" -> "http" [style="solid"]
  "piwik" -> "http" [style="solid"]
  "logs" -> "http" [style="dashed"]
  "piwik" -> "http" [style="dashed"]
  "html" -> "http" [style="dashed"]
  "ambassador" -> "api" [style="solid" label="graphdb"]
  "ambassador" -> "api" [style="solid" label="reldb"]
  "logs" -> "api" [style="dashed"]
  "ambassador" -> "logs" [style="solid" label="logstash"]
  2580 -> "elk" [style="solid" label=80]
  "ambassador" -> "piwik" [style="solid" label="db"]
  2480 -> "orientdb" [style="solid"]
}

image renderer

image renderer

display renderer

display renderer

License

The MIT License (MIT) Copyright (c) 2016 PMSIpilot