Appleシリコン上のDockerでもSchemaspyを動かしたい!
Schemaspyは、とても便利なER図とテーブル定義自動作成Toolです。
私はデータベース設計を考える時、視覚的に考えたいのでSchemaspyを愛用してます。
しかし、AppleシリコンMac上のDockerだと今の所パッと調べて出回っている手順では動作させることが出来ません。
私は今まではIntelMacと併用していたのですが、最近環境をAppleシリコンMacに全て切り替えました。
AppleシリコンMacでSchemaspyを動作させる方法を調べて動かすことが出来たので手順を共有します。
何故動かないか?
docker hubで公開されているイメージの参照しているopenjdkイメージがlinux/arm64に対応していないのが原因のようでした。ですので、linux/arm64に対応したバージョンのopenjdkイメージに差し替えて動作させちゃいましょう。
コード
自分の環境のコードからSchemaspyに関する部分だけ抜粋したので、実際は参照先DBコンテナを立ち上げるなり必要になるので、その辺は各自の環境に合わせて変更してみてください。
ディレクトリ構成はこんな感じです。
ディレクトリ構成
docker-compose.yml
docker
+ schemaspy
+ Dockerfile
+ config
+ schemaspy.properties
docker-compose.yml
version: "3.8"
services:
schemaspy:
build: ./docker/schemaspy
image: schemaspy/schemaspy
volumes:
- ./docker/schemaspy/output:/output
- ./docker/schemaspy/config/schemaspy.properties:/app/schemaspy.properties:ro
container_name: "schemaspy"
command: "java -jar schemaspy.jar"
nginx_schemaspy:
image: nginx:1.19.5-alpine
container_name: "nginx_schemaspy"
ports:
- "8080:80"
volumes:
- ./docker/schemaspy/output:/usr/share/nginx/html:ro
Dockerfile
FROM openjdk:8u212-jdk-alpine
ENV DRIVER_URL https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar
ENV APP_URL https://github.com/schemaspy/schemaspy/releases/download/v6.1.0/schemaspy-6.1.0.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の<DB名>
などの値は環境により書き換えてください。
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=<DBホスト名>
schemaspy.port=3306
schemaspy.db=<DB名>
schemaspy.u=<ユーザー名>
schemaspy.p=<パスワード>
# output dir to save generated files
schemaspy.o=/output
# db scheme for which generate diagrams
schemaspy.s=<スキーマ名>
参考