Spring Boot アプリケーションを Azure App Service の Linux にデプロイする

このチュートリアルでは、Docker を使用してお使いの Spring Boot アプリケーションをコンテナー化し、ご自身の Docker イメージを Azure App Service の Linux ホストにデプロイする手順について説明します。

前提条件

このチュートリアルの手順を完了するには、次の前提条件を満たす必要があります。

メモ

このチュートリアルには仮想化要件があるため、仮想マシンでこの記事の手順を実行することはできません。仮想化機能を有効にした物理コンピューターを使用する必要があります。

Spring Boot on Docker Getting Started Web アプリを作成する

次の手順では、単純な Spring Boot Web アプリケーションを作成し、それをローカルにテストするために必要な手順について説明します。

  1. コマンド プロンプトを開き、アプリケーションを保持するためのローカル ディレクトリを作成して、そのディレクトリに変更します。次に例を示します。

    mkdir SpringBoot
    cd SpringBoot
    
  2. Docker での Spring Boot の使用開始のサンプル プロジェクトを今作成したディレクトリに複製します。次に例を示します。

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. 完成したプロジェクトにディレクトリを変更します。次に例を示します。

    cd gs-spring-boot-docker/complete
    
  4. Maven を使用して JAR ファイルを構築します。次に例を示します。

    mvn package
    
  5. Web アプリが作成されたら、JAR ファイルがある target ディレクトリにディレクトリを変更し、Web アプリを起動します。次に例を示します。

    cd target
    java -jar spring-boot-docker-complete-0.0.1-SNAPSHOT.jar --server.port=80
    
  6. Web アプリのテストは、Web ブラウザーを使用してアプリをローカルで参照して行います。 たとえば curl が使用でき、Tomcat サーバをポート 80 で実行されるように構成した場合は、次のようになります。

    curl http://localhost
    
  7. 次のメッセージが表示されます。Hello Docker World

    Browse Sample App Locally

Azure Container Registry をプライベート Docker レジストリとして使用するために作成する

次の手順では、Azure portal を使用して Azure Container Registry を作成する方法を説明します。

メモ

Azure Portal ではなく Azure CLI を使用する場合は、「Azure CLI 2.0 を使用したプライベート Docker コンテナー レジストリの作成」の手順に従います。

  1. Azure Portalを参照して、サインインします。

    Azureポータルでアカウントにサインインしたら、「Azureポータルを使用してプライベートDockerコンテナレジストリを作成する」の記事の手順に従ってください。この手順は、便宜上次の手順で説明されています。

  2. [新規] のメニュー アイコンをクリックして、[コンテナー] を選択し、[Azure Container Registry] を選択します。

    Create a new Azure Container Registry

  3. [コンテナー レジストリの作成] ページが表示されたら、[レジストリ名][サブスクリプション][リソース グループ][場所] を入力します。 [作成] を選択します。

    Configure Azure Container Registry settings

  4. [設定][アクセス キー] を選択し、[管理者ユーザー] の後ろの [有効] スイッチをオンにします。

    Enable admin user UI in the Azure portal

Azure Container Registry にイメージをビルドするために Maven を構成する

  1. Spring Boot アプリケーションの完了プロジェクトディレクトリ (例: "C:\SpringBoot\gs-spring-boot-docker\complete" または "/users/robert/SpringBoot/gs-spring-boot-docker/complete") に移動し、pom.xml ファイルをテキスト エディターで開きます。

  2. pom.xml ファイル内の <properties> コレクションを、最新バージョンの jib-maven-plugin と、このチュートリアルの前のセクションにある Azure Container Registry のログイン サーバ値とアクセス設定で更新します。 次に例を示します。

    <properties>
       <jib-maven-plugin.version>3.2.0</jib-maven-plugin.version>
       <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix>
       <java.version>1.8</java.version>
    </properties>
    
  3. pom.xml ファイルの <plugins> コレクションに jib-maven-plugin を追加します。 この例では、バージョン 3.2.0 を使用します。

    <from>/<image> に基本イメージを指定します。ここでは mcr.microsoft.com/openjdk/jdk:11-ubuntu です。 基本イメージからビルドする最終イメージの名前を <to>/<image> に指定します。

    認証 {docker.image.prefix} は、前に示したレジストリ ページのログイン サーバです。 {project.artifactId} は、プロジェクトの最初の Maven ビルドに由来する JAR ファイルの名前とバージョン番号です。

    <plugin>
      <artifactId>jib-maven-plugin</artifactId>
      <groupId>com.google.cloud.tools</groupId>
      <version>${jib-maven-plugin.version}</version>
      <configuration>
         <from>
             <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image>
         </from>
         <to>
             <image>${docker.image.prefix}/${project.artifactId}</image>
         </to>
      </configuration>
    </plugin>
    
  4. Spring Boot アプリケーション用の完了プロジェクトディレクトリに移動し、次のコマンドを実行してアプリケーションをリビルドし、コンテナーを Azure Container Registry にプッシュします。

    az acr login --name wingtiptoysregistry && mvn compile jib:build
    

メモ

  1. コマンドaz acr login ...はAzure Container Registryへのログインを試みます。そうでない場合は、Jib-maven-pluginに<username><password>を指定する必要があります。jibの認証方法を参照してください。
  2. Jibを使用してイメージをAzure Container Registryにプッシュする場合、イメージはDockerfileを使用しません。詳細については、このドキュメントを参照してください。

コンテナー イメージを使用して Azure App Service で Linux に Web アプリを作成する

  1. Azure Portalを参照して、サインインします。

  2. [リソースの作成] のメニュー アイコンをクリックして、[コンピューティング] を選択し、[Web アプリ] を選択します。

    Create a new web app in the Azure portal

  3. [Web App on Linux] ページが表示されたら、次の情報を入力します。

    • [サブスクリプション] ボックスの一覧で、サブスクリプションを選択します。

    • [リソース グループ] ボックスの一覧で、既存のリソース グループを選択するか、新しいリソース グループの名前を指定して作成します。

    • [App name]\(アプリ名\) に一意の名前 ("wingtiptoyslinux" など) を入力します。

    • [発行]Docker Container を指定します。

    • [オペレーティング システム] として [Linux] を選択します。

    • [リージョン] を選択します。

    • [Linux プラン] を受け入れて既存の App Service プランを選択するか、[新規作成] を選択して新しい App Service プランを作成します。

    • [次へ: Docker] をクリックします

    Click the Next: Docker button to proceed.

    [Web アプリ] ページで、\[Docker\] を選択し、次の情報を入力します。

    • [単一コンテナー] を選択します。

    • レジストリ:コンテナを選択します。例:「wingtiptoysregistry

    • イメージ: 前に作成したイメージ ("spring-boot-docker" など) を選択します

    • タグ:イメージのタグを選択します。例:「最新

    • 起動コマンド:イメージにはすでに起動コマンドがあるため、空白のままにしておく

    上記の情報をすべて入力したら、[Review + create](レビュー + 作成)を選択します。

    Finish by selecting Review + Create.

    • [Review + create](レビュー + 作成) を選択します。

情報を確認し、 [作成] を選択します。

デプロイが完了したら、[リソースに移動] を選択します。 デプロイページには、アプリケーションにアクセスするための URL が表示されます。

Get URL of deployment

メモ

Azure により、ポート 80 で実行されている埋め込みの Tomcat サーバにインターネットの要求が自動的にマップされます。 ただし、埋め込みの Tomcat サーバをポート 8080 またはカスタム ポートで実行するように構成している場合は、埋め込みの Tomcat サーバのポートを定義する環境変数を Web アプリに追加する必要があります。 そのためには、次の手順を行ってください。

  1. Azure Portalを参照して、サインインします。

  2. [Web Apps] のアイコンを選択し、[App Services] ページからアプリを選択します。

  3. 左側のナビゲーションウィンドウで、 [構成] を選択します。

  4. [アプリケーション設定] セクションで、WEBSITES_PORT という名前の新しい設定を追加して、この値にカスタム ポート番号を入力します。

  5. [OK] を選択します。 その後、 [保存] を選びます。

Saving a custom port number in the Azure portal

リソースをクリーンアップする

予想外の課金を防ぐために、この記事で作成したリソースが不要になったら、Azure portal を使用して削除してください。

次のステップ

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。

関連項目

Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。

Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。

Docker サンプル プロジェクトでの Spring Boot の詳細については、Docker での Spring Boot の使用開始に関するページを参照してください。

独自の Spring Boot アプリケーションの使用開始に関するヘルプについては、「Spring Initializr」(https://start.spring.io/) を参照してください。

単純な Spring Boot アプリケーションの作成開始の詳細については、「Spring Initializr」(https://start.spring.io/) を参照してください。

Azure でカスタム Docker イメージを使用する方法に関するその他の例については、「Azure Web App on Linux 向けのカスタム Docker イメージを使用する」を参照してください。