はじめに
ER図作成ツールであるSchemaSpyをdocker環境で構築してみます。
SchemaSpyは以下の点が良さそうです。
- 既存のDBからリバースできる
- CUIで実行できる
- 複数の環境で動作する(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_disable “MSIE [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 にアクセスすると確認できます。
以下のような画面が表示されていれば成功です。
最後に
今回は構築のみご紹介させていただきました。
私もこれから使用してみて、仕事効率化に繋がるか判断したいと思います。
同じようにdocker環境で触ってみたい人の参考になれば幸いです。
参考