SQLServer起動
docker-compose.yamlの作成
ポート番号はかぶったら適宜変更してください。SA_PASSWORDはデータベース管理者のパスワードですので、適宜変更してください。ボリューム定義はお試しで動かすなら書かなくてもOKです。SQLServerのデータベース内容を永続化するなら記載する必要があります。
version: '3'
services:
mssql:
image: microsoft/mssql-server-linux:latest
container_name: mssqlserver01
ports:
- 1433:1433
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=s@12345678
- MSSQL_PID=Express
- MSSQL_LCID=1041
- MSSQL_COLLATION=Japanese_CI_AS
volumes:
- "/docker/mssqlserver/data:/var/opt/mssql/data"
- "/docker/mssqlserver/log:/var/opt/mssql/log"
- "/docker/mssqlserver/secrets:/var/opt/mssql/secrets"
SQLServerコンテナ起動
$ docker-compose up -d
さすがSQLServer。ちょいとヘビーです。ガンガン必要なものが落ちてきますので受け止めます。
処理が正常が完了したら、SQLServerのイメージを確認してみましょう。
1.35GBもあります。MySQLの最新版でも547MBなので倍以上ありますね。それはさておき、SQLServerのインストールがもう終わってしまいました。Docker万歳!!
Dockerコンテナ版なので、ポート番号と永続化ボリュームを分ければ、リソースの許す限り、こんな感じでSQLServerが起動し放題です。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
mssqlserver01 /opt/mssql/bin/sqlservr Up 0.0.0.0:1433->1433/tcp
mssqlserver02 /opt/mssql/bin/sqlservr Up 0.0.0.0:11433->1433/tcp
mssqlserver03 /opt/mssql/bin/sqlservr Up 0.0.0.0:21433->1433/tcp
mssqlserver04 /opt/mssql/bin/sqlservr Up 0.0.0.0:31433->1433/tcp
SQLServerに接続
sqlcmdを使う
SQLServer本体にくっついているCUIのデータベースクライアントです。ハッキリ言って使いにくいです。動作確認用のおまけみたいなもんです。しかし本番サーバなどでリッチなクライアントが使えない場合もありますので、使い方ぐらいは覚えておいた方がよいと思います。
sqlcmdで接続
Dockerコンテナ内のsqlcmdを使ってSQLServerに接続します。SQLServerに接続すると、プロンプトが 1> に変わります。
$ docker exec -it mssqlserver01 /opt/mssql-tools/bin/sqlcmd -U sa -P s@12345678
1>
データベース一覧を表示
データベースの一覧を表示してみましょう。SQLServerの場合は、SQL実行時にGOを入力してEnterキーです。MySQLから戻ってくるとよく忘れる・・・^^;
1> select name from sys.databases;
2> go
name
-----------
master
tempdb
model
msdb
データベースを作成
testdb01というデータベースを作成します。
1> create database testdb01
2> go
テーブルを作成
ユーザ情報を記録するテーブルを適当に作ってみます。
1> create table users(
2> id int identity(1,1) primary key,
3> name nvarchar(32),
4> sex char(1),
5> birthday datetime
6> );
7> go
レコードを追加
レコードを追加してみます。普通に動きますね。日本語も大丈夫です。
1> insert into users values ('taro', '1', '2020-03-01T00:00:00.000');
2> insert into users values ('hanako', '2', '2020-03-02');
3> insert into users values ('山田太郎', '1', '2020-03-03T01:23:45.678');
4> go
(1 rows affected)
(1 rows affected)
(1 rows affected)
1> select * from users;
2> go
id name sex birthday
----------- -------------------------------- --- -----------------------
1 taro 1 2020-03-01 00:00:00.000
2 hanako 2 2020-03-02 00:00:00.000
3 山田太郎 1 2020-03-03 01:23:45.677
(3 rows affected)
SQLServer Management Studioを使う
SQLServerの公式クライアントです。sqlcmdではやはり不便なので、SQLServerをがっつり触るという場合は、公式クライアントがオススメです。私のオススメポイントはこんな感じです。エクセルとの相性が良いのが大変助かります。
- GUIで直感的に使いやすい
- テーブルの中身はクリックだけで表形式で表示
- select文の実行結果も表形式で表示
- 表形式で表示されたデータはエクセルにそのままコピペ可能
- エクセルからコピペでデータが直接インサート可能
- エクセルのフィルタのように実行結果の表を条件で絞り込み可能
- SQLの実行プランの確認ができ、SQLのどこが遅いのか調査可能
SQLが書き方で性能が出ない場合も多々あります。そんな時は、実行プランでクエリを細かく調査することで原因を特定することができます。もっとデータベースからの応答を早くしたいという場合にも有効ですので、お試しください。
ただ、ソフト自体は重たいので、ちょっとSQLServerを触りたいけどsqlcmdでは不便だ・・・という方は次に紹介するA5を使ってみてください。
フリーの SQLクライアントA5:SQL Mk-2 を使う
ちょっとSQLServerのデータを触るぐらいなら、このツールの方が軽いですし、他のデータベースにも対応していますので、オススメです。
消し方
docker-compose down 実行時にオプションを指定することで簡単に削除可能です。
ボリュームでデータベースの永続化をしている場合は、-v オプションを付けると永続化したデータも削除されます。
もうSQLServerは使わない、という場合は、–rmi all オプションでローカルのイメージキャッシュを削除すればディスクの空き容量が確保できます。
$ docker-compose down --rmi all でイメージファイルも削除
$ docker-compose down -v でボリュームも削除
私の環境では -v 指定しても、永続化データが削除されませんでした。なんでだろ?
その場合は、docker-compose.yamlの volumes で指定したパスに格納されているファイルを手動で削除すればOKです。
まとめ
- SQLServerのExpress版(フリー)でお試しならWindows版を入れるより軽くて扱いやすい
- 使わなくなったらすぐに捨てられる(本体を汚さないのが嬉しい)
- コンテナなので一台のコンピュータ上でいくつも並列で動かせる(リソースの限り)
コメント