Skip to content

Docker Compose

Docker Compose

初期プロジェクト : tutorial-server-db-integration

最終プロジェクト : tutorial-server-docker-compose

このトピックでは、Docker Composeの下でサーバーKtorアプリケーションを実行する方法を紹介します。ここでは、

データベースの統合
Exposed SQLライブラリを使用してKtorサービスをデータベースリポジトリに接続するプロセスを学びます。
チュートリアルで作成したプロジェクトを使用します。このプロジェクトでは、Exposedを使用してPostgreSQLデータベースに接続しており、データベースとWebアプリケーションは別々に動作します。

アプリケーションの準備

データベース設定の抽出

データベース接続の設定チュートリアルで作成されたプロジェクトでは、データベース接続を確立するためにハードコードされた属性を使用しています。

PostgreSQLデータベースの接続設定を

カスタム設定グループ
設定ファイルでさまざまなサーバーパラメータを設定する方法を学びます。
に抽出しましょう。

  1. src/main/resourcesにあるapplication.yamlファイルを開き、以下のようにktorグループの外側にstorageグループを追加します。

    yaml

    これらの設定は、後でcompose.ymlファイルで構成されます。

  2. src/main/kotlin/com/example/plugins/にあるDatabases.ktファイルを開き、設定ファイルからストレージ設定をロードするようにconfigureDatabases()関数を更新します。

    kotlin

    configureDatabases()関数はApplicationConfigを受け取るようになり、config.propertyを使用してカスタム設定をロードします。

  3. src/main/kotlin/com/example/にあるApplication.ktファイルを開き、アプリケーション起動時に接続設定をロードするためにenvironment.configconfigureDatabases()に渡します。

    kotlin

Ktorプラグインの設定

Dockerで実行するには、アプリケーションに必要なすべてのファイルがコンテナにデプロイされている必要があります。使用しているビルドシステムに応じて、これを実現するためのさまざまなプラグインがあります。

この例では、Ktorプラグインはすでにbuild.gradle.ktsファイルに適用されています。

kotlin

Dockerの設定

Dockerイメージの準備

アプリケーションをDocker化(Dockerize)するには、プロジェクトのルートディレクトリに新しいDockerfileを作成し、以下の内容を挿入します。

Docker

TIP

このマルチステージビルド(multi-stage build)の仕組みの詳細については、Dockerイメージの準備を参照してください。

この例では Amazon Corretto の Docker イメージを使用していますが、以下のような他の適切な代替イメージに置き換えることもできます。

Docker Composeの設定

プロジェクトのルートディレクトリに新しいcompose.ymlファイルを作成し、以下の内容を追加します。

yaml
  • webサービスは、イメージ内にパッケージ化されたKtorアプリケーションを実行するために使用されます。
  • dbサービスは、postgresイメージを使用して、タスクを保存するためのktor_tutorial_dbデータベースを作成します。

サービスのビルドと実行

  1. 以下のコマンドを実行して、Ktorアプリケーションを含むfat JARを作成します。

    Bash
  2. docker compose upコマンドを使用して、イメージをビルドしコンテナを起動します。

    Bash
  3. Docker Composeがイメージのビルドを完了するまで待ちます。
  4. http://localhost:8080/static/index.htmlにアクセスしてWebアプリケーションを開きます。タスクのフィルタリングと新規追加のための3つのフォーム、およびタスクのテーブルが表示されたTask Manager Clientページが表示されるはずです。

    Task Manager Clientを表示しているブラウザウィンドウ