概要
すでに稼働しているDocker PJにSchema Spyを追加して手軽にER図を無料で自動生成する方法を記載します。
古い記事などが多く、動かないものも多かったので改めて記事化しました。
簡易版なので
- docker-compose.yamlへの追加
- schemaspy用のDockerfile、schemaspy.propertiesの作成
- dockerを起動し生成
の3ステップのみの構成となっています。
環境
Intel Mac
MySQL5.7
手順
1. docker-compose.yamlへの追加
docker-compose.yaml
のservices
に下記を追加する
services:
schemaspy:
build: ./schemaspy
image: treetips/schemaspy-mysql
container_name: schemaspy
volumes:
- ./schemaspy:/app/html:rw
- ./schemaspy/config/schemaspy.properties:/app/schemaspy.properties:ro
environment:
- LANG=ja_JP.UTF-8
- TZ=Asia/Tokyo
working_dir: "/app"
command: "java -jar schemaspy.jar"
2. schemaspy用のDockerfile、schemaspy.propertiesの作成
プロジェクト直下にschemaspy
ディレクトリを作成し、
Dockerfile
とschemaspy.properties
をschemaspy
ディレクトリに作成する
mkdir schemaspy
cd schemaspy
touch Dockerfile
mkdir config
cd config
touch schemaspy.properties
DRIVER_URL
は利用したいSQLエンジンによって切り替えてください。
下記はMySQL5.7用
となっています
FROM openjdk:8u121-jdk-alpine
ENV DRIVER_URL https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar
ENV APP_URL https://github.com/schemaspy/schemaspy/releases/download/v6.2.4/schemaspy-6.2.4.jar
WORKDIR /app
RUN apk --update add graphviz ttf-dejavu && \
apk --update add --virtual .builddep tzdata wget libressl && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
wget -O mysql-connector-java.jar ${DRIVER_URL} && \
wget -O schemaspy.jar ${APP_URL} && \
apk del .builddep && \
rm -rf /var/cache/apk/*
database_name
,root
などはenvなどを参考に実際に使っているものを入れます
# type of database. Run with -dbhelp for details
schemaspy.t=mysql
# optional path to alternative jdbc drivers.
schemaspy.dp=/app/mysql-connector-java.jar
# database properties: host, port number, name user, password
schemaspy.host=mysql
schemaspy.port=3306
schemaspy.db=database_name
schemaspy.u=root
schemaspy.p=password
# output dir to save generated files
schemaspy.o=/app/html
# db scheme for which generate diagrams
schemaspy.schemas=database_name
3. Dockerを起動しER図を生成
docker-compose up -d
コンテナが停止するまでしばらく待てばOK
せっかくなのでコンテナのログを見る
こんなログが出ていたら起動はしている
____ _ ____
/ ___| ___| |__ ___ _ __ ___ __ _/ ___| _ __ _ _
\___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | |
___) | (__| | | | __/ | | | | | (_| |___) | |_) | |_| |
|____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, |
|_| |___/
6.0.0-rc2
SchemaSpy generates an HTML representation of a database schema's relationships.
下記のように出ていたら、DBへの接続が成功し、テーブルごとの解析をしている
Writing/diagramming detailsINFO - Completed summary in 31 seconds
INFO - Writing/diagramming details
.Table -> hoge
.Table -> fuga
下記のように出ているときは接続情報などが間違っているのでschemaspy.properties
を見直してください。
WARN - Connection Failure
Failed to connect to database URL [jdbc:mysql://127.0.0.1:3306/database_name] Communications link failure
目安として、170テーブルあると10分程度かかる模様
下記のように出ているか、Schema Spyコンテナが停止すれば出力が完了。
INFO - View the results by opening /app/html/database_name/index.html
また、下記のようなschemaspy
ディレクトリになっていたら完了です。
index.html
をお好みのブラウザで閲覧してください。
schemaspy
├── Dockerfile
├── anomalies.js
├── bower
├── column.js
├── components.js
├── config
├── constraint.js
├── fonts
├── images
├── index.html
├── main.js
├── relationships.js
├── schemaSpy.css
├── schemaSpy.js
├── tables
└── database_name