LoginSignup
19
12

More than 3 years have passed since last update.

SchemaSpyの環境をdocker-composeで構築

Posted at

はじめに

ER図作成ツールであるSchemaSpyをdocker環境で構築してみます。
SchemaSpyは以下の点が良さそうです。
1. 既存のDBからリバースできる
2. CUIで実行できる
3. 複数の環境で動作する(Windows / Mac / Unix系OS )

githubからクローンしたい方はこちら

環境

以下の環境で検証はしています。

  • macOS Mojave 10.14.5
  • Docker version 18.09.2, build 6247962
  • docker-compose version 1.23.2, build 1110ad01

構成

今回は以下のような構成になります。

.
├── README.md
├── docker
│   ├── mysql
│   │   ├── data
│   │   ├── my.cnf
│   │   └── sql
│   │       └── 001-create-tables.sql
│   ├── nginx
│   │   └── default.conf
│   └── schemaspy
│       ├── Dockerfile
│       └── config
│           └── schemaspy.properties
├── docker-compose.yml
└── schemaspy
    └── (HTMLやJSファイルが自動で作成されます)

手順

1. docker-compose.yml作成

まずは、docker-compose.ymlを作成します。

docker-compose.yml
version: '3'

services:
  nginx:
    image: nginx:1.13.9-alpine
    container_name: schemaspy_nginx
    volumes:
      - ./schemaspy:/var/www/html:ro
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - "8081:80"
    environment:
      - LANG=ja_JP.UTF-8
      - TZ=Asia/Tokyo
    command: "nginx -g 'daemon off;'"

  schemaspy:
    build: ./docker/schemaspy
    image: treetips/schemaspy-mysql
    container_name: schemaspy
    volumes:
      - ./schemaspy:/app/html:rw
      - ./docker/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"

  mysql:
    image: mysql:5.7
    container_name: mysql_host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_database
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/mysql/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

2. nginxコンテナ作成

nginxの設定ファイルを作成します。

default.conf
server {
    listen                80 default;
    server_name           localhost;

    root                  /var/www/html;
    charset               utf-8;
    disable_symlinks      off;
    index                 index.html;

    access_log            off;
    error_log             off;

    sendfile              on;
    tcp_nodelay           on;
    tcp_nopush            on;
    keepalive_timeout     120s;

    gzip                  on;
    gzip_http_version     1.0;
    gzip_disableMSIE [1-6].(?!.*SV1)”;
    gzip_comp_level       1;
    gzip_proxied          any;
    gzip_vary             on;
    gzip_buffers          4 8k;
    gzip_min_length       1100;
    gzip_types            text/plain
                          text/xml
                          text/css
                          application/xml
                          application/xhtml+xml
                          application/rss+xml
                          application/atom_xml
                          application/json
                          application/javascript
                          application/x-javascript
                          application/x-httpd-php;
}

3. SchemaSpyコンテナ作成

Schemaspyコンテナを作成します。コンテナ用のDockerfileとDB接続情報などを記載したconfigファイルを用意します。

Dockerfile
FROM openjdk:8u121-jdk-alpine

ENV DRIVER_URL http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.45/mysql-connector-java-5.1.45.jar
ENV APP_URL https://github.com/schemaspy/schemaspy/releases/download/v6.0.0-rc2/schemaspy-6.0.0-rc2.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/*
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_host
schemaspy.port=3306
schemaspy.db=test_database
schemaspy.u=docker
schemaspy.p=docker
# output dir to save generated files
schemaspy.o=/app/html
# db scheme for which generate diagrams
schemaspy.s=work

4. MySql

MySqlの環境設定ファイルを用意します。

my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

こちらはDocker起動時にサンプルテーブルを作成するsqlを用意します。
ER図でリレーションが確認できるように外部キーをつけるのをお忘れなく。

001-create-tables.sql
DROP TABLE IF EXISTS `groups`;
CREATE TABLE IF NOT EXISTS `groups` (
  `id`                         INT(11)      NOT NULL DEFAULT 0 AUTO_INCREMENT      COMMENT 'ID',
  `created_at`                 DATETIME     NULL     DEFAULT NULL                  COMMENT '登録日時',
  `updated_at`                 DATETIME     NULL     DEFAULT NULL                  COMMENT '更新日時',
  `deleted_at`                 DATETIME     NULL     DEFAULT NULL                  COMMENT '削除日時',
  `name`                       VARCHAR(255) NOT NULL DEFAULT ''                    COMMENT '名前',
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
  `id`         INT(11)      NOT NULL DEFAULT 0      AUTO_INCREMENT COMMENT 'ID',
  `created_at` DATETIME     NULL     DEFAULT NULL                  COMMENT '登録日時',
  `updated_at` DATETIME     NULL     DEFAULT NULL                  COMMENT '更新日時',
  `deleted_at` DATETIME     NULL     DEFAULT NULL                  COMMENT '削除日時',
  `group_id`   INT(11)      NOT NULL DEFAULT 0                     COMMENT '組織ID',
  `name`       VARCHAR(255) NOT NULL DEFAULT ''                    COMMENT '名前',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`group_id`)
    REFERENCES `groups` (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

起動

ビルド

docker-compose build

起動

docker-compose up -d

停止

docker-compose down

確認

http://localhost:8081 にアクセスすると確認できます。
以下のような画面が表示されていれば成功です。

スクリーンショット 2019-05-27 1.24.00.png

最後に

今回は構築のみご紹介させていただきました。
私もこれから使用してみて、仕事効率化に繋がるか判断したいと思います。
同じようにdocker環境で触ってみたい人の参考になれば幸いです。

参考

19
12
1

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
19
12