2019年5月22日水曜日

Dockerでpython3.7とgraphvizをインストールしたコンテナ(Alpine3.9ベース)を作成する

pythonとgraphvizを使用して、フロー図などをのグラフを描画する事ができます。

〇graphvizの出力画像


〇graphvizがインストールされたイメージの作成方法
1.以下のDockerfileとコマンドでpython3.7とgraphvizがインストールされたコンテナを作成します。
docker build -t py37graphviz:1.0 .

Dockerfile
FROM python:3.7-alpine3.9
RUN mkdir -p /usr/share/fonts \
  && cd /usr/share/fonts \
  && wget https://ipafont.ipa.go.jp/old/ipafont/IPAfont00303.php -O IPAfont00303.zip \
  && unzip IPAfont00303.zip \
  && rm IPAfont00303.zip \
  && apk --no-cache add libstdc++ \
    graphviz \
    fontconfig \
  && fc-cache -fv \
  && apk --no-cache --virtual pydeps add gcc \
    g++ \
    python3-dev \
    musl-dev \
    cython \
  && pip install graphviz \
  && apk del --purge pydeps
CMD ["/bin/sh"]

2.コンテナ内でサンプルコードtest1.pyからgraphvizを使用して画像を生成できます。
実行するコマンド:
docker run -v `pwd`:/tmp --rm -it py37graphviz:1.0 /usr/local/bin/python3 /tmp/test1.py

test1.py
# -*- coding: utf-8 -*-
from graphviz import Digraph

dot = Digraph(format='png')
# フォント設定
dot.attr('node', fontname="MS Gothic")
# ノード作成
dot.node("項目1")
dot.node("項目2")
dot.node("項目3")
dot.node("項目4")
# エッジ作成
dot.edge("項目1", "項目2")
dot.edge("項目2", "項目3")
dot.edge("項目2", "項目4")
dot.render("test1", directory="/tmp")

〇関連情報
PythonとGraphvizに関する記事はこちら(http://kyle-in-jp.blogspot.com/search/label/PythonGraphviz)を参照してください。

0 件のコメント:

コメントを投稿