Mac
Linux
SQLServer
docker

Dockerを使用してMacからSQL Serverに接続する(方法編)

目的・背景

 先日PCをWindowsからMacに買い替え、新しく開発環境を構築しています。

 この記事では近年普及している(らしい)、サーバ仮想化に代わるモデルであるコンテナ技術「Docker」をせっかくの機会なので利用して、SQL ServerをmacOS上で使用する方法をまとめました。

環境

PC
macOS

構築対象

対象 バージョン等 備考
Docker Community Edition Version 18.06.1-ce-mac73 メモリ 4GB
SQL Server on Linux 2017-latest
Azure Data Studio Version 1.0.0 SQL Operations Studioの後継

記事の範囲

  1. Dockerのインストール
  2. Azure Data Studio のインストール
  3. Dockerを使用して SQL Server コンテナイメージをpullして実行
  4. コンテナ内の SQL Server への接続
    • 【CUI】 コマンドラインツール sqlcmd を使用した接続
    • 【GUI】 Azure Data Studio を使用した接続

1. Dockerのインストール

下記の公式サイトの手順に従いインストールします。
https://docs.docker.com/docker-for-mac/install/

SQL Server を使用する前提条件として、ディスク領域が3.25GB以上必要なため、Dockerをインストール後、[Preferences](設定)>[Advanced] から、メモリの上限を4GBに増やします。
Screen Shot 2018-10-11 at 21.23.54.png

2. Azure Data Studio のインストール

下記のGithubから最新版をインストールします。
https://github.com/Microsoft/azuredatastudio/releases

  • azuredatastudio-macos-1.0.0.zip

Screen Shot 2018-10-11 at 21.28.26.png

3. Dockerを使用して SQL Server コンテナイメージをpullして実行

下記の Dockerhub 公式サイトでコマンドを調べることができます。
https://hub.docker.com/r/microsoft/mssql-server/

(1) コンテナイメージのpull

Terminalを開き、上記のサイトで取得したコマンドを入力すると、SQL Server on Linux for Docker Engineのイメージがダウンロードされます。

Terminal-bash
sudo docker pull mcr.microsoft.com/mssql/server

実例

  • コマンド入力して実行した画面。

Screen Shot 2018-10-11 at 22.46.23.png

  • パスワードを求められるので、管理者権限パスワードを入力。
  • ダウンロードとpullが完了した画面。完了まで30分〜1時間とけっこう時間かかりました。

Screen Shot 2018-10-11 at 23.25.47.png

(2) インスタンスの開始(run)

ダウンロードが完了したら、SQL Server 2017 の最新版のインスタンスを開始します。

  • パスワードはSA用に強力なパスワードをつけます。テンプレートを適宜変更してください。

    • 8文字以上/大文字・小文字・数字・記号含む
    • ルールに則っていないと処理が開始されません、自分はこれでしばらくハマりました...。
  • パターン1:コンテナに名前を指定しない場合、自動的に名前がつきます。

Terminal-bash
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 \
   -d mcr.microsoft.com/mssql/server:2017-latest
  • パターン2:「--name ○○」を追加すると、○○で指定した名前がコンテナにつきます。
Terminal-bash
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -d mcr.microsoft.com/mssql/server:2017-latest

実例

  • 名前を指定しないパターン1で、インスタンスを開始。

Screen Shot 2018-10-11 at 23.40.23.png

(3) コンテナ情報の確認

ここで一度、現在実行されているコンテナ情報を取得し、次で説明するサーバ接続で使用するための情報を確認しておきます。

Terminal-bash
docker ps

実例

  • 今回は コンテナID='eff2b3c79670'、コンテナ名='gracious_zhukovsky'になっていることが確認できました。
    • コンテナ名には著名人の名前がランダムで与えられるというおしゃ仕様。「zhukovsky(ジュコーフスキー)」というと、流体力学の父ニコライ・ジュコーフスキーか、ロマン派の詩人・名翻訳家のヴァシーリー・ジュコーフスキー。後者のヴァシーリーが素敵すぎます。

Screen Shot 2018-10-12 at 0.12.15.png

4. コンテナ内の SQL Server への接続

【CUI】 コマンドラインツール sqlcmd を使用した接続

ひきつづきTerminalを使用します。

  • 実行中のコンテナ内のbashシェルを起動。
Terminal-bash
docker exec -it <container_id|container_name> "bash"
Terminal-bash(例)
docker exec -it gracious_zhukovsky "bash"
  • コンテナ内でsqlcmdを使用してローカル接続。
Terminal-root@コンテナID
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>
Terminal-root@コンテナID(例)
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P myStrongPassword!

実例

  • 1>が出力されたら接続できている証拠。

Screen Shot 2018-10-12 at 0.48.13.png

  • データ取得、sqlcmdセッション終了QUIT、コンテナ内のコマンドプロンプトbashシェル終了exitまで。

Screen Shot 2018-10-12 at 0.50.02.png

【GUI】 Azure Data Studio を使用した接続

  • Azure Data Studio を起動。

Screen Shot 2018-10-12 at 1.29.31.png

Screen Shot 2018-10-12 at 1.30.11.png

Screen Shot 2018-10-12 at 1.30.29.png

  • コンテナ内で SQL Server が起動していることを確認して、ローカル接続。

Screen Shot 2018-10-12 at 1.46.35.png

  • 接続を確認。

Screen Shot 2018-10-12 at 1.47.06.png

まとめ

 MacOSでの環境構築手始めに、Dockerを使用してSQL Serverをインストールし、CUIやGUIから接続をしてみました。
 WindowsPCだとMS社のウェブサイトからSQL Serverをインストールするだけだったので何も考えなかったのですが、今回試してみたおかげで今まで知らなかった世界がひらけて楽しかったです。
 Docker、コンテナ、Linux、シェル、bash、CUI、コマンドラインと全部初めてだったので...。
 作業自体はわかればサクサクできるので、つづいて理論やしくみの理解を深めていこうかと思います。

 ちなみに、$ docker stop <コンテナID>ならいいのですが、$ docker rm <コンテナID>でコンテナ削除すると、DBの本来の役目であるデータの保持ができず全て消えてしまうので、それを回避するために$ docker run ...の時点で「データの永続化」のオプションをつける必要があるのですが、それはまた別の機会に。

 長々と読んでくださってありがとうございます。少しでもお役に立てていたら何よりです。
 *もし当記事の誤認識、不備等にお気づきになられた際は、コメントなどで教えていただけると大変ありがたいです...!

参考サイト