🦡

公式サンプルを公式Dockerイメージに入れる(SQL Server編)

2024/09/17に公開

はじめに

サンプルデータベースが欲しくなったのですが、最近は見かけないような気がします。
昔々は、scott/tiger でつないで EMP テーブルで練習するのがお約束でしたが…。
調べてみることにしました。

最初は、サンプルデータベースの場所だけの備忘録にしようと思ったのですが、ちょっとデータベースを使ったデモとかテストが必要になったので、サンプルデータベース入りの Docker イメージを作って、イメージを作る材料もイメージも公開しようと思います。

SQL Server 編

MySQL には似たような記事がいくつかあります(苦笑)。
これまでの PostgreSQL、MySQL、MariaDB のパターンではなく、Microsoft さんは独自というか公式イメージには同じような拡張ポイントを入れておらず、やるならサンプル見ながら自分で作ってね。というスタンスのようです。

公式 Docker イメージ

オフィシャルイメージは、以下にあります。
https://mcr.microsoft.com/product/mssql/server/about

このイメージをメンテナンスしているのが、以下と書いてあります。
https://github.com/Microsoft/mssql-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 のサンプルをスタート地点とします。

公式サンプル

公式サンプルは、以下にありました。
https://learn.microsoft.com/ja-jp/sql/samples/sql-samples-where-are?view=sql-server-ver16

ここの 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

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

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 イメージ

以下で公開しました。
https://hub.docker.com/r/take0a/mssql-nwnd-pubs

docker pull take0a/mssql-nwnd-pubs で pull できます。

GitHub リポジトリ

以下で公開しました。
https://github.com/take0a/docker-library/tree/main/mssql

他のデータベースのものも公開したら、少しきれいにしておきます。

おわりに

やはり、サンプルデータベースは必要ですよね。

GitHubで編集を提案
株式会社ROBONの技術ブログ

Discussion