Git Product home page Git Product logo

docker-compose-viz's Introduction

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

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

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

Options:
      --override=OVERRIDE            Tag of the override file to use [default: "override"]
  -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
      --ignore-override              Ignore override file

How to read the graph

Links

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

docker-compose-viz's People

Contributors

jubianchi avatar artospaj avatar

Watchers

James Cloos avatar Štefan Černý avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.