公式サンプルを公式Dockerイメージに入れる(SQL Server編)
はじめに
サンプルデータベースが欲しくなったのですが、最近は見かけないような気がします。
昔々は、scott/tiger でつないで EMP テーブルで練習するのがお約束でしたが…。
調べてみることにしました。
最初は、サンプルデータベースの場所だけの備忘録にしようと思ったのですが、ちょっとデータベースを使ったデモとかテストが必要になったので、サンプルデータベース入りの Docker イメージを作って、イメージを作る材料もイメージも公開しようと思います。
SQL Server 編
MySQL には似たような記事がいくつかあります(苦笑)。
これまでの PostgreSQL、MySQL、MariaDB のパターンではなく、Microsoft さんは独自というか公式イメージには同じような拡張ポイントを入れておらず、やるならサンプル見ながら自分で作ってね。というスタンスのようです。
公式 Docker イメージ
オフィシャルイメージは、以下にあります。
このイメージをメンテナンスしているのが、以下と書いてあります。
このオフィシャルイメージの Usage
の下の方に書かれています。
You can also use the tools in an entrypoint.sh script to do things like create databases or logins, attach databases, import data, or other setup tasks. See this example of using an entrypoint.sh and setup.sql scripts to create a database.
ということなので、この Dockerfile のサンプルをスタート地点とします。
公式サンプル
公式サンプルは、以下にありました。
ここの SQL サンプルのリポジトリ
で、GitHub にたどり着きます。
今回は、Northwind and pubs sample databases for Microsoft SQL Server を組み込むことにします。
こちらを選択した理由は、Docker イメージに組み込むファイル数が少なかったからです。
Docker イメージを作る
using an entrypoint.sh and setup.sql scripts to create a databaseをダウンロードします。
SQLファイル
Northwind and pubs sample databases for Microsoft SQL Server をダウンロードします。
Dockerfile
FROM mcr.microsoft.com/mssql/server:2017-latest
# Create a config directory
RUN mkdir -p /usr/config
WORKDIR /usr/config
# Bundle config source
COPY ./entrypoint.sh ./configure-db.sh ./northwind-pubs/instnwnd.sql ./northwind-pubs/instpubs.sql /usr/config/
# Grant permissions for to our scripts to be executable
RUN chmod +x /usr/config/entrypoint.sh \
&& chmod +x /usr/config/configure-db.sh
ENTRYPOINT ["./entrypoint.sh"]
もうちょっとレイヤーをなんとかとも思ったのですが、オリジナルに敬意を表して、最小限の変更で。
Makefile
.PHONY: build run push clean
IMAGE=docker.io/take0a/mssql-nwnd-pubs
CONTAINER=mssql01
PASSWORD=Passw0rd!
build: clean
docker build . -t $(IMAGE) --no-cache
run:
docker run --name $(CONTAINER) -dit -e ACCEPT_EULA=Y -e MSSQL_SA_PASSWORD=$(PASSWORD) $(IMAGE)
docker exec -it $(CONTAINER) /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $(PASSWORD)
push:
docker push $(IMAGE)
clean:
docker container rm $(CONTAINER) -f
docker image rm $(IMAGE) -f
こんな感じにしておくと、コマンドを忘れて「あわわ」しなくてすみます。
Docker イメージ
以下で公開しました。
docker pull take0a/mssql-nwnd-pubs
で pull できます。
GitHub リポジトリ
以下で公開しました。
他のデータベースのものも公開したら、少しきれいにしておきます。
おわりに
やはり、サンプルデータベースは必要ですよね。
Discussion