ITエンジニア日記 ~NO SKILL, NO LIFE~

学んだ技術や、気になることをアウトプットしていきます。プログラミング, インフラ, etc...

DockerでSQL Server環境を構築する

SQLを試すための環境が欲しかったため、DockerでSQL Serverを実行する環境を作ってみました。

[目次]

1. やりたいこと

  • Docker for Windowsで、SQL Server のコンテナを取得・起動。
  • コンテナ内のSQL Serverでデータベースを作成。
  • ホストPCのSQL Server Management Studioから、コンテナで起動しているSQL Serverに接続。
  • SQL実行する。

2. SQL Serverのコンテナを取得する

Docker HubからSQL Serverのコンテナをダウンロードしてきます。 Docker Hubには、Microsoft公式のUbuntu上に構築されたSQL Serverのコンテナが存在します。*1 現在、イメージの最新はSQL Server 2017なので、下記コマンドでダウンロードします。

docker image pull mcr.microsoft.com/mssql/server:2017-latest

ダウンロード完了後、イメージが存在することを確認します。

docker image ls

f:id:masakiXX0:20191026232105j:plain
イメージがダウンロードできたことを確認

3. コンテナの生成と起動

SQL Serverのイメージから、コンテナの生成と起動を実施します。

<YourStrong@Passw0rd>には、8文字以上/大文字・小文字・数字・記号含む のパスワードを指定します。この規則に則ったパスワードを指定しないと、うまく起動しなかったです。

--nameにはコンテナを識別するための名称を指定します。 今回は”sql1”としています。

ユーザー名はデフォルトで"SA"となります。

docker container run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-latest

f:id:masakiXX0:20191026233111j:plain
コンテナの生成・起動

下記コマンドで、現在起動中のコンテナの情報が確認できます。

docker container ps

f:id:masakiXX0:20191026233308j:plain
コンテナの起動確認

コマンドの実行結果を確認すると、イメージの名称や、コンテナの名称が確認できます。

4. SQL Serverを起動する

まずは、実行中のコンテナ内のbashシェルを起動します。

docker container exec -it sql1 "bash"

次に、SQL Serverを起動します。

"PASSWORD"には、コンテナ生成・起動時にコマンドに入力したパスワードを指定します。

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<PASSWORD>"

f:id:masakiXX0:20191026234508j:plain
bashシェルを起動後、SQL Serverを起動する

"1>"というプロンプトが表示されたら、起動成功です。

5. データベースの作成

新しいデータベースを作成します。 今回は「TestDB」という名前で作成します。

1> CREATE DATABASE TestDB
2> GO
1> USE TestDB
2> GO

コマンドを打っただけでは実行されないため、新しい行(上記だと"2>"の部分)に"GO"と入力する必要があります。

f:id:masakiXX0:20191026235213j:plain
データベース作成

データベースの作成が完了したら、SQL Serverbashからログアウトします。

1> QUIT

f:id:masakiXX0:20191026235416j:plain
SQL Serverからログアウト

# exit

f:id:masakiXX0:20191026235619j:plain
bashからログアウト

6. SQL Server Management Studioから接続

コンテナで起動中のSQL Serverに、ホスト端末のSQL Server Management Studio(以降SSMS)から接続します。

SSMSの接続設定は下記の通り。

項目
サーバーの種類 データベース エンジン
サーバー名 localhost
ログイン sa
パスワード 設定したパスワード

f:id:masakiXX0:20191027000322j:plain

サーバーへの接続画面で「接続」ボタンを押すと、SQL Serverへ接続されます。

f:id:masakiXX0:20191027000335j:plain
SSMSからコンテナ上のSQL Serverに接続したところ

コンテナ内で作成したデータベースが存在することが確認できます。

ここまでくれば、テーブルの作成やSQLの実行も思いのままです。

f:id:masakiXX0:20191027002149j:plain
SQLが実行できる

7. コンテナの停止・削除

最後に、起動中のコンテナの停止方法と、コンテナの削除方法を紹介します。

7.1. コンテナの停止

コンテナを停止するには、下記のコマンドを使用します。 "sql1"は停止したいコンテナのコンテナ名です。

docker container stop sql1

停止後、再度起動したいときは、下記コマンドを実行するとコンテナが再度起動します。

docker container start sql1

7.2. コンテナの削除

コンテナを削除するには、下記のコマンドを使用します。 "sql1"は削除したいコンテナのコンテナ名です。

docker container rm sql1

注意しないといけないのは、コンテナを削除してしまうと作成したテーブルなども削除されてしまうことです。

逆に、コンテナを削除すればテーブル含めすべて消える(=環境にゴミが残らない)ので気軽に環境構築が可能ということです。

8. まとめ

SQL Serverをコンテナ上で起動してみました。SSMSも使えるので、気軽にSQLの試し打ちとかできそうです。

参考