DockerコンテナでSQLServerを動かす方法

IT
スポンサーリンク

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が書き方で性能が出ない場合も多々あります。そんな時は、実行プランでクエリを細かく調査することで原因を特定することができます。もっとデータベースからの応答を早くしたいという場合にも有効ですので、お試しください。

SQL Server Management Studio (SSMS) のダウンロード - SQL Server Management Studio (SSMS)
最新バージョンの SQL Server Management Studio (SSMS) をダウンロードします。

ただ、ソフト自体は重たいので、ちょっと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版を入れるより軽くて扱いやすい
  • 使わなくなったらすぐに捨てられる(本体を汚さないのが嬉しい)
  • コンテナなので一台のコンピュータ上でいくつも並列で動かせる(リソースの限り)
ばったん
ばったん

ばったんのオススメ書籍紹介コーナー!

コメント

タイトルとURLをコピーしました