MemSQLを使ってみようVol.5 : 番外編1

#Docker環境でMemSQLを使ってみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/81790c5f-5506-45c5-8790-8c0cf3db63bb.png)
Dockerという便利な環境が有る事は、既に皆さんもご存知かと思います。この環境の詳細に関しては特に触れる事はしませんが、その環境が既に動いているという前提で、そのDocker環境上へMemSQLの環境（かなり小さな環境なので、実運用ではないSQLチェックとか、開発用のメモリ空間をあまり使わずに済むようなテーブルを使った実験等で使うようにしてください）を導入してみます。

##事前準備
今回は、Windows10Pro（Homeの場合、Docker環境がサクッと入らないみたいなので・・・）に標準構成のDocker　Desktopを導入します。手順などは既に多くの皆様がレポートされていますので、それらの情報を参考にしてください。

![j1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/c4e7e1f7-f9ff-4f03-52e2-907b0c81c019.jpeg)

##試用ライセンスを取得する
この手順は以前の[**MemSQLを使ってみようVol.2：準備編**](https://qiita.com/wadaken1961/items/928c804a533cb3488e7a)を参考にしてみてください。

##導入してみる・・・
この環境で推奨される構成は、ホストマシンに少なくとも4コアと4GBのRAMが必用になりますので、MemSQLの導入前にそれぞれのDocker環境を確認して準備を進めておいてください。

Windowsの場合はパワーシェル経由で作業を行いますので、作業に当たりこのツールを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/f4f75a2c-11b0-677c-ebea-7981cbaff8d8.png)
導入の手順的には非常に簡単で、

（１）取得しているライセンスキーを環境変数として登録

```shell
$env:LICENSE_KEY = "ここにお持ちのライセンスキーを入れます"
```

（２）必要なDocker環境を引っ張ってきます。

```shell
docker run -i --init --name memsql-ciab -e LICENSE_KEY=$env:LICENSE_KEY -p 3306:3306 -p 8080:8080 memsql/cluster-in-a-box
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/720753c2-c322-1268-8a8b-122c9291bc1d.png)
この処理で万が一作業が上手く行かなかった場合は、一度Docker環境を削除してから再度挑戦する必要があります。

```shell
docker rm memsql-ciab
```
（３）MemSQLのコンテナを起動する

```shell
docker start memsql-ciab
```

無事に起動できると、以前ご紹介したWebコンソールが使えるようになります。

```shell
http://localhost:8080
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/0f73ab61-298f-2bbf-8408-0a49dfdfc422.png)

Localhostから入ります。

ユーザ名：root
パスワード：無し

で入れますので、取り急ぎ先へ進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/e9111a93-eb29-c5a9-edb3-d0f984e2095b.png)

。。。あれっ！？Docker版はｖ７になってる・・（汗）本編の先を急がないといけませんね。ｖ７に関しては改めて別の機会に報告させて頂きます。

###ちなみに・・・
今回導入したDocker版のWebコンソールに入って、左下の？マークをクリックすると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/df6bc48a-e820-d568-b72a-3e2b32c8bea5.png)
「Show Tutorial」というメニューがありますので、それを選択すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/1e2a056f-5dc0-4481-561a-0dd355841820.png)
というポップアップが右側に出てきますので（ネット接続が必用）リンクをクリックし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/812052a4-ee37-cfc9-30fd-f1231d6144a3.png)
真ん中のリンクを選択すると、ステップバイステップでMemSQLを使った株式情報系のサンプルがチュートリアルとして利用出来ます。各ページに出てくるボタンを押してクエリをコピーすればWebコンソールのSQLエディタに自動的に流し込まれますので、右上の「Run」ボタンを選択するかキーボードの組み合わせでクエリを発信し、その結果を実際に見る事が出来る様になります。データベースも処理の過程で、実際にDocker環境内に作成されますので、一度試されると良いかもしれません。

##補足（こんな時は・・）
今回は、Windows10Pro上でのDocker環境利用でしたが、シャットダウンして再度立ち上げて行く過程で、
**Error response from daemon: driver failed programming external connectivity on endpoint memsql-ciab (3bda3e76b048a7d8cadd7855ded91fc0bf6ef1575e2a3c103f27f3c73999d243): 
Error starting userland proxy: /forwards/expose/port returned unexpected status: 500.**
というメッセージが出力されて、それから前に進めなくなる現象に遭遇された方もいらっしゃるかと思います。実際、この原稿を書いていて最初に遭遇した際は、まさに「むむむ・・・」状態でしたので、参考までにその解決までのステップを紹介しておきたいと思います。

この問題は、調べて行くと結構有名な現象の様で、検索されて既に解決策を得られている方も多いかと思いますが、基本的に裏方で動いているプロセスが、所要のポートを握りっぱなしにして”知らんぷり”を決め込む状況が起きているので、そのプロセスをピンポイントで処理すれば解決するとの事です。（以下は、当方の環境上で対応した方法になりますので、実施に際しては自己責任でお願い致します）

（１）稼働中のDocker Desktopを終了する
右下にあるDockerアイコン上で右クリックでポップアップメニューを出し、「Quit Docker Desktop」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/3cc524b6-1094-7a7c-aa30-5bde82266816.png)
（２）終了するまで少し待つ

（３）com.docker.backend.exeというプロセスを探す
Windowsのタスクマネージャを起動（Ctrl+Alt+Del)してcom.docker.backend.exeというプロセスを探します。「詳細」タブの中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/c247deb2-7f12-a072-359f-3bbd75341179.png)

（４）このプロセスを停止する
マウスの右ボタンクリックでポップアップメニューを出し、「タスクの終了」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/a3ffd210-7f95-fb1a-5860-c4eb79c19df5.png)
（５）自動的に再起動されるのでそれを待つ

（６）Docker Desktopを再起動

あとは、再度立ち上げのSTEPを行えばOKだと思います。

##今回のまとめ
MemSQLのDocker版に関しては、基本のDocker環境が普通に動いていれば、CPUとメモリ環境の確認だけですぐに使えるようになるかと思います。また、今回はWindows10Pro環境上への導入検証でしたが、基本的にはDockerから上の環境は共通になりますので、Dockerまでの各OS依存の部分を考慮すれば、Windows向けと同様にすぐにテストや学習・検証が可能です。

参考URL:
https://docs.memsql.com/v7.0/guides/deploy-memsql/self-managed/memsql-tools/single-host/docker/step-1/

大きなテーブルを振り回すのには厳しいかと思いますが、各種の実験やデモ等で十分活用できるかと思いますし、とにかくオンメモリではない、インメモリのSQLデータベースを試してみたい！という事であれば、今回のDocker環境への導入は十分検討に値すると思います。
MemSQL自体は、クラウド・オンプレミスや物理・仮想を問わない（仮想環境でも、最近の各プラットホームに関してのCPUとメモリアクセスに関するオーバーヘッドは、それ自体を殆ど考慮に値しない所まで進化していますので・・）柔軟な基盤設定を可能にしていますし、この先の4クラスタ構成での性能検証や、本番環境を想定した大規模クラスターでのPoC（この場合は、専用の期限付きライセンスをMemSQL社に申請する必要があります）への第一歩の入門編として、ぜひ今回のDocker環境を活用されては如何でしょうか？

では、次回より本編に戻っての活用編を再開したいと思います。

[**MemSQLを使ってみようVol.6 : 脱線編**](https://qiita.com/wadaken1961/items/281723a5938d68a12c61)に続く

##謝辞
本解説に転載させて頂いているスクリーンショットは、一部を除いて現在MemSQL社が公開されている公式ホームページの画像を使わせて頂いております。また、本内容とMemSQL社の公式ホームページで公開されている内容が異なる場合は、MemSQL社の情報が優先する事をご了解ください。