Docker DesktopでGridDBサーバを動作させる

以前のDockerに関するブログでは、GridDBサーバを1つのコンテナで、アプリケーションを別のコンテナで動かしていました。これはうまく動作しましたが、Docker Desktop上のコンテナでGridDBを実行し、アプリケーションをホスト上で実行したいという要望が多くありました。

これは簡単なことに思えるかもしれませんが、そうではありません。Linuxホストではうまくいきますが、WindowsやMacOSXホストでは、ネットワークスタックの違いにより、コンテナへの直接ルーティングができず、通常のGridDB設定ができないという問題がありました。

WindowsやMacOSXのDockerをLinuxのように動作させるためにどうすべきか、私たちのチームが時間をかけて検討した結果、Docker Desktop上でシームレスに動作するようにGridDBを設定する際の、ある工夫を発見しました。その工夫とは、コンテナのホスト名をlocalhostに設定することで、GridDBがホストとの通信を妨げるDockerブリッジネットワークを見ないようにすることができるということです。

次の図で示すように、GridDB サーバーコンテナが localhost を使用していない場合、172.16.0.0 ネットワークを介してクライアントと通信できませんが、ホスト名を localhost に設定すると、127.0.0.1 アドレスを使用して接続に成功しています。

サーバーを起動する

ここでは、DockerHubでホストされている以前のブログと同じサーバーイメージを使用します。

> docker pull griddbnet/griddb

サーバーを起動します。

> docker run --hostname=localhost -d -t  griddbnet/griddb 

コンテナの起動には1分ほどかかりますので、クラスタに参加するまでそのコンテナのdocker logの出力を見てから接続を試みてください。

アプリケーションを実行する

まず、GitHub hereからSample1.javaを取ってきます。コンプリートを容易にするために、特定のディレクトリ構造を必要としないようpackageの行を削除することをお勧めします。そこから、GridStoreのプロパティを編集して、以下のようにします。

Properties props = new Properties();
props.setProperty("notificationMember", "127.0.0.1:10001");
props.setProperty("clusterName", "defaultCluster");
props.setProperty("user", "admin"); 
props.setProperty("password", "admin");

上記の編集が必要なのは、この前のブログ記事で説明したように、Dockerコンテナ内のGridDBがデフォルトのMULTICASTネットワークではなく、FIXED_LISTネットワークを使用するように設定されているからです。

gridstore.jarファイルをダウンロードする必要がある場合は、MvnRepositoryからダウンロードしてください。

> javac -cp ".:gridstore-4.6.0.jar" Sample1.java
> java -cp ".:gridstore-4.6.0.jar" Sample1
Person:  name=name02 status=false count=2 lob=[65, 66, 67, 68, 69, 70, 71, 72, 73, 74]

SQLWorkBenchJ で JDBC を使用して GridDB に接続する場合、ドライバを com.toshiba.mwcloud.gs.sql.Driver に、ドライバの JAR パスを適切に設定し、URL を jdbc:gs:///defaultCluster/public?notificationMember=127.0.0.1:20001 に設定、そしてユーザ名とパスワードを設定した値(デフォルトの GridDB コンテナでは admin/admin)に設定してください。

SqlWBConsoleでは、接続文字列は次のようになります。

SQL> WbConnect -driver=com.toshiba.mwcloud.gs.sql.Driver -driverJar=gridstore-jdbc-4.6.0.jar -url=jdbc:gs:///defaultCluster/public?notificationMember=127.0.0.1:20001 -username=admin -password=admin

gridstore-jdbc.jar は、MvnRepositoryからもダウンロードできます。

Leave a Reply

Your email address will not be published. Required fields are marked *