3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【手軽】SchemaSpyを既存Docker環境に追加する方法

Posted at

概要

すでに稼働しているDocker PJにSchema Spyを追加して手軽にER図を無料で自動生成する方法を記載します。
古い記事などが多く、動かないものも多かったので改めて記事化しました。

簡易版なので

  1. docker-compose.yamlへの追加
  2. schemaspy用のDockerfile、schemaspy.propertiesの作成
  3. dockerを起動し生成

の3ステップのみの構成となっています。

環境

Intel Mac
MySQL5.7

手順

1. docker-compose.yamlへの追加

docker-compose.yamlservicesに下記を追加する

docker-compose.yaml
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ディレクトリを作成し、
Dockerfileschemaspy.propertiesschemaspyディレクトリに作成する

sh
mkdir schemaspy
cd schemaspy
touch Dockerfile
mkdir config
cd config
touch schemaspy.properties

DRIVER_URLは利用したいSQLエンジンによって切り替えてください。
下記はMySQL5.7用となっています

schemaspy/Dockerfile
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などを参考に実際に使っているものを入れます

schemaspy/config/schemaspy.properties
# 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
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?