DockerComposeを使用したネットワークブートストラップする
Dockerformは、CordaノードをDockerコンテナのローカルに簡単にデプロイすることができます。
これは、Cordaのgradleプラグインが提供するタスクで、Network Bootstrapperが生成したアウトプットを使って、ブートストラップされたCordaネットワークを簡単に起動するために使用できるdocker-compose.yml
ファイルを自動的に生成します。
Network Bootstrapperの公式ドキュメントはこちらです。
メリット
- Network Bootstrapper(こちらでも説明しています)構築を簡略化できるdocker-compose.yamlを自動的に作成します。これにより手動での構築が不要になります。
- Cordaノードとそのデータベースの両方のデプロイメントをより適切に制御できるようになります。
- Kubernetesでも使用可能な公式Dockerイメージの使用方法を理解することができます。
ウォークスルー事例
ドキュメントには、Dockerformがどのように機能するかが非常によく説明されています。ここでは、R3のGitHubにあるCorDappのサンプルを見てみましょう。
https://github.com/corda/samples-kotlin/tree/master/Features/dockerform-yocordapp .
Dockerformについてのドキュメントはこちら。
build.gradleの新しいタスク
- 外部からSSHでDockerコンテナに接続するために必要な “sshdPort “を追加します
- ノードに使用する公式Corda Docker Imageを宣言します
- 外部からSSHでDockerコンテナに接続するために必要な “sshdPort “を追加します
prepareDockerNodes “タスクを実行する
./gradlew prepareDockerNodes
を実行すると、/build/nodes
フォルダ内に以下のようなアウトプットが作成されます。
docker-compose.yaml
は、prepareDockerNodes
タスクから取得した情報で自動的に生成されます。
以下は、docker-compose.yaml
の内容です。Dockerのすべてのボリュームが、build/nodes
内に生成されたフォルダに関連付けられています。
外部データベースを追加する
上記の例ではH2データベースを使用していますが、他のデータベースを追加することも可能です。DockerformがDockerコンテナの作成を行います。PostgreSQLを使った例を見てみましょう。
こちらの内容は、こちらのドキュメントにも記載されています。
ドキュメントに記載されている手順が完了したら、./gradlew prepareDockerNodes
を実行します。ここでは、出力とdocker-compose.yaml
が更新されます。PostgreSQLのパラメータを設定した新しいサービスであるnotary-db
があります。
また、Dockerformは上記のDocker Composeで使用されるPostgreSQLのDockerfileと、データベースを初期化するスクリプトも作成します。