以前の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からもダウンロードできます。
ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb