メモ
Spring Boot アプリケーションの場合は、Azure Container Appsを使用します。 ただし、その場合でもデプロイ先として Azure Kubernetes Service を使うことはできます。 詳細については、「Java アプリケーションをデプロイするために適切な Azure サービスを選択する」を参照してください 。
このチュートリアルでは、Kubernetes と Docker を使用して Spring Boot アプリケーションを開発し、Microsoft Azureにデプロイする方法について説明します。 具体的には、Spring Boot をアプリケーション開発に使用し、コンテナーのデプロイに Kubernetes を し、アプリケーションをホストするために Azure Kubernetes Service (AKS) を します。
Kubernetes と Docker は、開発者が、コンテナーで実行されるアプリケーションのデプロイ、スケーリング、管理を自動化できるよう支援するオープン ソース ソリューションです。
前提条件
- Azure サブスクリプション。Azure サブスクリプションをお持ちでない場合は、MSDN サブスクライバー特典をアクティブ化するか、無料のAzure アカウントにサインアップしてください。
- Azure コマンド ライン インターフェイス (CLI)。
- サポートされている Java Development Kit (JDK)。 Azure での開発時に使用可能な JDK の詳細については、「Java の Azure および Azure Stack に関するサポート」 を参照してください。
- Apache の Maven 構築ツール (バージョン 3)。
- Git クライアント。
- Docker クライアント。
- ACR Docker 資格情報ヘルパー。
メモ
このチュートリアルの仮想化要件のため、仮想マシンでこの記事の手順に従うことはできません。 仮想化機能が有効になっている物理コンピューターを使用する必要があります。
Spring Boot on Docker Getting Started Web アプリを作成する
次の手順で、Spring Boot Web アプリケーションをビルドしてローカルでテストします。
コマンド プロンプトを開き、アプリケーションを保持するローカル ディレクトリを作成し、そのディレクトリに変更します。例:
mkdir C:\SpringBoot cd C:\SpringBoot-- または --
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBootDocker での Spring Boot の使用開始 サンプル プロジェクトを、ディレクトリに複製します。
git clone https://github.com/spring-guides/gs-spring-boot-docker.git完成したプロジェクトにディレクトリを変更します。
cd gs-spring-boot-docker cd completeMaven を使用してサンプル アプリをビルドして実行します。
mvn package spring-boot:runWeb アプリをテストするには、
http://localhost:8080を参照するか、次のcurlコマンドを使用します。curl http://localhost:8080次のメッセージが表示されます: Hello Docker World
Azure CLI を使用して Azure Container Registry を作成する
コマンド プロンプトを開きます。
Azure アカウントにサインインします。
az loginAzure サブスクリプションを選択します。
az account set -s <YourSubscriptionID>このチュートリアルで使用する Azure リソースのリソース グループを作成します。
az group create --name=wingtiptoys-kubernetes --location=eastusリソース グループ内に、プライベートな Azure コンテナー レジストリを作成します。 このチュートリアルでは、後の手順で、このレジストリに Docker イメージとしてサンプル アプリをプッシュします。
wingtiptoysregistryを、レジストリの一意の名前に置き換えます。az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Jib を使用してアプリをコンテナー レジストリにプッシュする
Azure CLIからAzure Container Registryにサインインします。
# set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login" az config set defaults.acr=wingtiptoysregistry az acr loginVisual Studio Codeなどのテキスト エディターでpom.xmlファイルを開きます。
code pom.xmlpom.xmlファイルの
<properties>コレクションを、Azure Container Registry のレジストリ名と最新バージョンのjib-maven-pluginで更新します。<properties> <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. --> <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix> <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version> <java.version>1.8</java.version> </properties>以下の例に示すように
<plugins>ファイルの コレクションを更新し、<plugin>要素にjib-maven-pluginのエントリが含まれるようにします。 Microsoft Container Registry (MCR):mcr.microsoft.com/openjdk/jdk:11-ubuntuの基本イメージを使用します。Azureの公式にサポートされている JDK が含まれています。 公式にサポートされている JDK を含むその他の MCR 基本イメージについては、「Microsoft Build of OpenJDKのインストール」を参照してください。<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}/gs-spring-boot-docker</image> </to> </configuration> </plugin>Spring Boot アプリケーションの完成したプロジェクト ディレクトリに移動し、次のコマンドを実行してイメージをビルドし、イメージをレジストリにプッシュします。
az acr login && mvn compile jib:build
メモ
セキュリティ上の理由から、 az acr login を使用して作成した資格情報は 1 時間有効です。
401 Unauthorized エラーが表示された場合は、az acr login --name <your registry name> コマンドをもう一度実行して再認証します。
Read timed out エラーが発生した場合は、mvn -Djib.httpTimeout=7200000 jib:dockerBuildでタイムアウトを増やすか、無限タイムアウトに-Djib.httpTimeout=0を使用してください。
Azure CLIを使用して AKS に Kubernetes クラスターを作成する
Azure Kubernetes Service で Kubernetes クラスターを作成します。 次のコマンドでは、クラスター名として
wingtiptoys-akscluster、Azure Container Registry (ACR)wingtiptoysregistryがアタッチされ、DNS プレフィックスとしてwingtiptoys-kubernetesされた Kubernetes クラスターが、wingtiptoys-kubernetesリソース グループに作成されます。az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keysこのコマンドは、完了するまで時間がかかる場合があります。
Azure CLI を使用して
kubectlをインストールします。 Linux ユーザーは、Kubernetes CLI を/usr/local/binにデプロイするため、このコマンドの前にsudoを付ける必要がある場合があります。az aks install-cliクラスター構成情報をダウンロードして、Kubernetes Web インターフェイスと
kubectlからクラスターを管理できるようにします。az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
イメージを Kubernetes クラスターにデプロイする
このチュートリアルでは、 kubectlを使用してアプリをデプロイし、Kubernetes Web インターフェイスを使用してデプロイを調べることができます。
kubectl を使用してデプロイする
コマンド プロンプトを開きます。
kubectl runコマンドを使用して、Kubernetes クラスターのコンテナーを実行します。 Kubernetes でのアプリのサービス名と完全なイメージ名を指定します。 次に例を示します。kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestこのコマンドの説明:
runコマンドの直後に、コンテナー名gs-spring-boot-dockerを指定します。--imageパラメーターは、ログイン サーバーとイメージ名を組み合わせてwingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestとして指定します。
kubectl exposeコマンドを使用して、Kubernetes クラスターを外部に公開します。 サービス名、アプリにアクセスするために使用される公開 TCP ポート、およびアプリがリッスンする内部ターゲット ポートを指定します。 次に例を示します。kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080このコマンドの説明:
expose podコマンドの直後に、コンテナー名gs-spring-boot-dockerを指定します。--typeパラメーターは、クラスターでロード バランサーを使用することを指定します。--portパラメーターは、公開 TCP ポートとして 80 を指定します。 このポートでアプリにアクセスします。--target-portパラメーターは、内部 TCP ポートとして 8080 を指定します。 ロード バランサーは、このポートでアプリに要求を転送します。
アプリをクラスターにデプロイした後、外部 IP アドレスに対してクエリを実行し、Web ブラウザーで開きます。
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Azure でサンプル アプリを参照する
Kubernetes リソース ビューを使用してデプロイする
いずれかのリソース ビュー ([名前空間]、[ワークロード]、[サービスとイングレス]、[ストレージ]、または [構成]) から [追加] を選択します。
Kubernetes リソースビュー
次の YAML を貼り付けます。
apiVersion: apps/v1 kind: Deployment metadata: name: gs-spring-boot-docker spec: replicas: 1 selector: matchLabels: app: gs-spring-boot-docker template: metadata: labels: app: gs-spring-boot-docker spec: containers: - name: gs-spring-boot-docker image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestYAML エディターの下部にある [追加] を選択してアプリケーションをデプロイします。
Kubernetes リソース ビュー
前の手順と同様に、
Deploymentをデプロイした後、YAML エディターの下部にある [追加 ] を選択して、次の YAML を使用してServiceをデプロイします。apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-dockerYAML ファイルを追加すると、リソース ビューアーに Spring Boot アプリケーションが表示されます。 外部サービスにはリンクされた外部 IP アドレスが含まれているため、ブラウザーでアプリケーションを簡単に表示できます。
外部 IPを選択します。 Azureで実行されている Spring Boot アプリケーションが表示されます。
Azure でサンプル アプリを参照する
次のステップ
Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。
関連項目
Azure での Spring Boot の使用の詳細については、次の記事を参照してください。
Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。
Visual Studio Code を使用して Java アプリケーションを Kubernetes にデプロイする方法の詳細については、Visual Studio Code Java チュートリアルを参照してください。
Docker サンプル プロジェクトでの Spring Boot の詳細については、Docker での Spring Boot の使用開始に関するページを参照してください。
Spring Boot アプリケーションの作成の詳細については、次のリンクを参照してください。
- 単純な Spring Boot アプリケーションの作成の詳細については、Spring Initializr (https://start.spring.io/) を参照してください。
次のリンクでは、Azureでの Kubernetes の使用について詳しく説明します。
Kubernetes コマンド ライン インターフェイスの使用の詳細については、https://kubernetes.io/docs/reference/kubectl/の kubectl ユーザー ガイドを参照してください。
Kubernetes web サイトには、プライベート レジストリでのイメージの使用に関するさまざまな記事があります。
Azureでカスタム Docker イメージを使用する方法のその他の例については、「Azure Web App on Linux でのカスタム Docker イメージの使用」を参照してください。
Azure Dev Spaces を使用してAzure Kubernetes Service (AKS)でコンテナーを直接実行およびデバッグする方法の詳細については、「Javaを使用した Azure Dev Spaces の概要」を参照してください。