45 lines
1.2 KiB
Python
Executable File
45 lines
1.2 KiB
Python
Executable File
#!/bin/python3
|
|
|
|
# python3 ./visu.py | sudo docker run --rm -i vladgolubev/dot2png > file.png && xviewer file.png
|
|
|
|
import re
|
|
|
|
conns = []
|
|
layer = ""
|
|
|
|
def parseLine(line, actual_layer):
|
|
from_re = re.match("FROM (.*) AS (.*)", line)
|
|
if from_re:
|
|
actual_layer = from_re.group(2)
|
|
if ":" in from_re.group(1):
|
|
conns.append("\"" + from_re.group(1) + "\" [shape=box]")
|
|
conn = "\"" + from_re.group(1) + "\" -> \"" + from_re.group(2) + "\""
|
|
if not conn in conns:
|
|
conns.append(conn)
|
|
|
|
copy_re = re.match("COPY --from=([a-z-_]*)", line)
|
|
if copy_re:
|
|
conn = "\"" + copy_re.group(1) + "\" -> \"" + actual_layer + "\"[style=dashed]"
|
|
if not conn in conns:
|
|
conns.append(conn)
|
|
return actual_layer
|
|
|
|
|
|
|
|
file = open("Dockerfile", "r")
|
|
conns.append("digraph {")
|
|
# conns.append("rankdir=LR;")
|
|
line = file.readline()
|
|
while line:
|
|
line = file.readline()
|
|
if "${BASE}" in line:
|
|
layer = parseLine(line.replace("${BASE}", "fpm-alpine"), layer)
|
|
layer = parseLine(line.replace("${BASE}", "apache-debian"), layer)
|
|
else:
|
|
layer = parseLine(line, layer)
|
|
conns.append("}")
|
|
|
|
|
|
for line in conns:
|
|
print(line)
|