Skip to content

Docker Compose

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

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

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

データベースを統合する
Learn the process of connecting Ktor services to database repositories with the Exposed SQL Library.
チュートリアルで作成したプロジェクトを使用します。このプロジェクトは、Exposedを使用してPostgreSQLデータベースに接続し、データベースとWebアプリケーションが別々に実行されるようにします。

アプリケーションを準備する

データベース設定の抽出

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

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

カスタム構成グループ
Learn how to configure various server parameters in a configuration file.
に抽出しましょう。

  1. src/main/resourcesapplication.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化するには、プロジェクトのルートディレクトリに新しいDockerfileを作成し、次のコンテンツを挿入します。

Docker

TIP

このマルチステージビルドの仕組みの詳細については、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に移動します。タスクマネージャークライアントページが表示され、タスクのフィルタリングと新規追加のための3つのフォームと、タスクのテーブルが表示されるはずです。

    タスクマネージャークライアントを表示しているブラウザウィンドウ