Dot language learning note

Dot is a script language in Graphviz tool box to create graphs. Using layout engine to create graph, then we can export graph to many format of image, such as png, jpg, svg .etc. So we can use it to ‘paint’ structure diagram, and flow charts.

Commonly used keywords
graph: define properties of the graph
node: define properties of nodes in the graph, such as fontname
subgraph: define a subgraph, should start with ‘cluster_’, or the engine can’t recognize it.

For example


digraph service_map {
    graph [dpi="300"];
    node [color="gray";shape="record";fontname="Microsoft YaHei"];
    
    label="Service Map";
    Request;
    github_pages [label="GitHub Pages"];
    subgraph cluster_web{
        label="Web front end server";
        nginx [label="Reverse Proxy Server"];
        docker [label="Docker Container Manager"];
    }
    subgraph cluster_docker{
        label="Docker Container Manager";
        openproject [label="OpenProject"];
        gitlab [label="GitLab"];
        wordpress [label="WordPress"];
        mysql [label="Common Mysql Database"];
    }
    subgraph cluster_filesystem{
        label="Mount at where";
        openproject_mnt [label="/opt/openproject/data:/var/lib/postgresql/9.6/main\l\n/opt/openproject/logs:/var/log/supervisor\l\n/opt/openproject/static:/var/db/openproject\l"];
        gitlab_mnt [label="/opt/gitlab/config:/etc/gitlab\l\n/opt/gitlab/logs:/var/log/gitlab\l\n/opt/gitlab/data:/var/opt/gitlab\l"];
        wordpress_mnt [label="/opt/wordpress/www:/var/www/html"];
        mysql_mnt [label="/opt/mysql/data:/var/lib/mysql"];
    }
    Request->nginx;
    nginx->docker;
    nginx->github_pages;
    docker->wordpress [label="hostname=wordpress.endercaster.com"];
    docker->openproject [label="hostname=openproject.endercaster.com"];
    docker->gitlab [label="hostname=gitlab.endercaster.com"];
    wordpress->mysql;
    wordpress->wordpress_mnt [label="mount"];
    openproject->openproject_mnt [label="mount"];
    gitlab->gitlab_mnt [label="mount"];
    mysql->mysql_mnt [label="mount"];
}

The code generated a diagram below

Using dot, I don’t have to care about layout, just pay attention to modules in software, what feature does it provide. It’s easily to use, I like it.