Fabric8 Maven プラグインを使用して Spring Boot アプリをデプロイするDeploy a Spring Boot app using the Fabric8 Maven Plugin

Fabric8Kubernetes 上に構築されたオープン ソース ソリューションであり、開発者が Linux コンテナーでアプリケーションを作成するために役立ちます。Fabric8 is an open-source solution that is built on Kubernetes, which helps developers create applications in Linux containers.

このチュートリアルでは、Maven 用 Fabric8 プラグインを使用してアプリケーションを開発し、Azure Container Service (AKS) の Linux ホストにデプロイする手順について説明します。This tutorial walks you through using the Fabric8 plugin for Maven to develop to deploy an application to a Linux host in the Azure Container Service (AKS).

前提条件Prerequisites

このチュートリアルの手順を完了するには、次の前提条件を満たす必要があります。In order to complete the steps in this tutorial, you need to have the following prerequisites:

注意

このチュートリアルには仮想化要件があるため、仮想マシンでこの記事の手順を実行することはできません。仮想化機能を有効にした物理コンピューターを使用する必要があります。Due to the virtualization requirements of this tutorial, you cannot follow the steps in this article on a virtual machine; you must use a physical computer with virtualization features enabled.

Spring Boot on Docker Getting Started Web アプリを作成するCreate the Spring Boot on Docker Getting Started web app

次の手順で、Spring Boot Web アプリケーションをビルドしてローカルでテストします。The following steps walk you through building a Spring Boot web application and testing it locally.

  1. コマンド プロンプトを開き、アプリケーションを保持するためのローカル ディレクトリを作成し、そのディレクトリに変更します。次に例を示します。Open a command-prompt and create a local directory to hold your application, and change to that directory; for example:

    md /home/GenaSoto/SpringBoot
    cd /home/GenaSoto/SpringBoot
    

    -- または ---- or --

    md C:\SpringBoot
    cd C:\SpringBoot
    
  2. Docker での Spring Boot の使用開始 サンプル プロジェクトを、ディレクトリに複製します。Clone the Spring Boot on Docker Getting Started sample project into the directory.

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

    cd gs-spring-boot-docker/complete
    

    -- または ---- or --

    cd gs-spring-boot-docker\complete
    
  4. Maven を使用してサンプル アプリをビルドして実行します。Use Maven to build and run the sample app.

    mvn clean package spring-boot:run
    
  5. Web アプリをテストするには、 http://localhost:8080 を参照するか、次の curl コマンドを使用します。Test the web app by browsing to http://localhost:8080, or with the following curl command:

    curl http://localhost:8080
    

    Hello Docker World」というメッセージが表示されるはずです。You should see a Hello Docker World message displayed.

    サンプル アプリケーションをローカルで参照する

Kubernetes コマンド ライン インターフェイスをインストールし、Azure CLI を使用して Azure リソース グループを作成しますInstall the Kubernetes command-line interface and create an Azure resource group using the Azure CLI

  1. コマンド プロンプトを開きます。Open a command prompt.

  2. 次のコマンドを入力して、Azure アカウントにログインします。Type the following command to log in to your Azure account:

    az login
    

    指示に従って、ログインを完了しますFollow the instructions to complete the login process

    次のように、Azure CLI にアカウントの一覧が表示されます。The Azure CLI will display a list of your accounts; for example:

    [
      {
        "cloudName": "AzureCloud",
        "id": "00000000-0000-0000-0000-000000000000",
        "isDefault": false,
        "name": "Windows Azure MSDN - Visual Studio Ultimate",
        "state": "Enabled",
        "tenantId": "00000000-0000-0000-0000-000000000000",
        "user": {
          "name": "Gena.Soto@wingtiptoys.com",
          "type": "user"
        }
      }
    ]
    
  3. まだ Kubernetes コマンド ライン インターフェイス (kubectl) がインストールされていない場合、次のように、Azure CLI を使用してインストールできます。If you do not already have the Kubernetes command-line interface (kubectl) installed, you can install using the Azure CLI; for example:

    az acs kubernetes install-cli
    

    注意

    Kubernetes CLI は /usr/local/bin にデプロイされるため、Linux ユーザーはこのコマンドの前に sudo を付けなければならない場合があります。Linux users may have to prefix this command with sudo since it deploys the Kubernetes CLI to /usr/local/bin.

    kubectl がもうインストールされていて kubectl のバージョンが古すぎる場合、この記事の後半で説明する手順を完了しようとすると、次の例のようなエラー メッセージが表示される場合があります。If you already have kubectl) installed and your version of kubectl is too old, you may see an error message similar to the following example when you attempt to complete the steps listed later in this article:

    error: group map[autoscaling:0x0000000000 batch:0x0000000000 certificates.k8s.io
    :0x0000000000 extensions:0x0000000000 storage.k8s.io:0x0000000000 apps:0x0000000
    000 authentication.k8s.io:0x0000000000 policy:0x0000000000 rbac.authorization.k8
    s.io:0x0000000000 federation:0x0000000000 authorization.k8s.io:0x0000000000 comp
    onentconfig:0x0000000000] is already registered
    

    この場合、kubectl を再インストールしてバージョンを更新する必要があります。If this happens, you will need to reinstall kubectl to update your version.

  4. 次のように、このチュートリアルで使用する Azure リソースのリソース グループを作成します。Create a resource group for the Azure resources that you will use in this tutorial; for example:

    az group create --name=wingtiptoys-kubernetes --location=westeurope
    

    各値の説明:Where:

    • wingtiptoys-kubernetes は、リソース グループの一意な名前ですwingtiptoys-kubernetes is a unique name for your resource group
    • westeurope は、アプリケーションの適切な地理的な場所ですwesteurope is an appropriate geographic location for your application

    次のように、Azure CLI に、リソース グループ作成の結果が表示されます。The Azure CLI will display the results of your resource group creation; for example:

    {
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wingtiptoys-kubernetes",
      "location": "westeurope",
      "managedBy": null,
      "name": "wingtiptoys-kubernetes",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    

Azure CLI を使用して Kubernetes クラスターを作成するCreate a Kubernetes cluster using the Azure CLI

  1. 次のように、新しいリソース グループ内に Kubernetes クラスターを作成します。Create a Kubernetes cluster in your new resource group; for example:

    az acs create --orchestrator-type kubernetes --resource-group wingtiptoys-kubernetes --name wingtiptoys-cluster --generate-ssh-keys --dns-prefix=wingtiptoys
    

    各値の説明:Where:

    • wingtiptoys-kubernetes は、この記事の前半のリソース グループの名前ですwingtiptoys-kubernetes is the name of your resource group from earlier in this article
    • wingtiptoys-cluster は、Kubernetes クラスターの一意な名前ですwingtiptoys-cluster is a unique name for your Kubernetes cluster
    • wingtiptoys は、アプリケーションの一意な DNS 名ですwingtiptoys is a unique name DNS name for your application

    次のように、Azure CLI にクラスター作成の結果が表示されます。The Azure CLI will display the results of your cluster creation; for example:

    {
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wingtiptoys-kubernetes/providers/Microsoft.Resources/deployments/azurecli0000000000.00000000000",
      "name": "azurecli0000000000.00000000000",
      "properties": {
        "correlationId": "00000000-0000-0000-0000-000000000000",
        "debugSetting": null,
        "dependencies": [],
        "mode": "Incremental",
        "outputs": {
          "masterFQDN": {
            "type": "String",
            "value": "wingtiptoysmgmt.westeurope.cloudapp.azure.com"
          },
          "sshMaster0": {
            "type": "String",
            "value": "ssh azureuser@wingtiptoysmgmt.westeurope.cloudapp.azure.com -A -p 22"
          }
        },
        "parameters": {
          "clientSecret": {
            "type": "SecureString"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.ContainerService",
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "locations": [
                  "westeurope"
                ],
                "properties": null,
                "resourceType": "containerServices"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "template": null,
        "templateLink": null,
        "timestamp": "2017-09-15T01:00:00.000000+00:00"
      },
      "resourceGroup": "wingtiptoys-kubernetes"
    }
    
  2. 次のようにして、新しい Kubernetes クラスターの資格情報をダウンロードします。Download your credentials for your new Kubernetes cluster; for example:

    az acs kubernetes get-credentials --resource-group=wingtiptoys-kubernetes --name wingtiptoys-cluster
    
  3. 次のコマンドで接続を検証します。Verify your connection with the following command:

    kubectl get nodes
    

    次の例のように、ノードと状態の一覧が表示されるはずです。You should see a list of nodes and statuses like the following example:

    NAME                    STATUS                     AGE       VERSION
    k8s-agent-00000000-0    Ready                      5h        v1.6.6
    k8s-agent-00000000-1    Ready                      5h        v1.6.6
    k8s-agent-00000000-2    Ready                      5h        v1.6.6
    k8s-master-00000000-0   Ready,SchedulingDisabled   5h        v1.6.6
    

Azure CLI を使用してプライベート Azure コンテナー レジストリを作成するCreate a private Azure container registry using the Azure CLI

  1. Docker イメージをホストするために、プライベート Azure コンテナー レジストリをリソース グループ内に作成します。次に例を示します。Create a private Azure container registry in your resource group to host your Docker image; for example:

    az acr create --admin-enabled --resource-group wingtiptoys-kubernetes --location westeurope --name wingtiptoysregistry --sku Basic
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    wingtiptoys-kubernetes この記事の前半のリソース グループの名前を指定します。Specifies the name of your resource group from earlier in this article.
    wingtiptoysregistry ご使用のプライベート レジストリの一意の名前を指定します。Specifies a unique name for your private registry.
    westeurope アプリケーションの適切な地理的位置を指定します。Specifies an appropriate geographic location for your application.

    次のように、Azure CLI にレジストリ作成の結果が表示されます。The Azure CLI will display the results of your registry creation; for example:

    {
      "adminUserEnabled": true,
      "creationDate": "2017-09-15T01:00:00.000000+00:00",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/wingtiptoys-kubernetes/providers/Microsoft.ContainerRegistry/registries/wingtiptoysregistry",
      "location": "westeurope",
      "loginServer": "wingtiptoysregistry.azurecr.io",
      "name": "wingtiptoysregistry",
      "provisioningState": "Succeeded",
      "resourceGroup": "wingtiptoys-kubernetes",
      "sku": {
        "name": "Basic",
        "tier": "Basic"
      },
      "storageAccount": {
        "name": "wingtiptoysregistr000000"
      },
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries"
    }
    
  2. Azure CLI からコンテナー レジストリのパスワードを取得します。Retrieve the password for your container registry from the Azure CLI.

    az acr credential show --name wingtiptoysregistry --query passwords[0]
    

    次のように、Azure CLI にレジストリのパスワード結果が表示されます。The Azure CLI will display the password for your registry; for example:

    {
      "name": "password",
      "value": "AbCdEfGhIjKlMnOpQrStUvWxYz"
    }
    
  3. Maven インストールの構成ディレクトリ (既定では ~/.m2/ または C:\Users\username.m2) に移動し、settings.xml ファイルをテキスト エディターで開きます。Navigate to the configuration directory for your Maven installation (default ~/.m2/ or C:\Users\username.m2) and open the settings.xml file with a text editor.

  4. settings.xml ファイルの新しい <server> コレクションに Azure Container Registry の URL、ユーザー名、およびパスワードを追加します。Add your Azure Container Registry URL, username and password to a new <server> collection in the settings.xml file. idusername がレジストリの名前になります。The id and username are the name of the registry. 前のコマンドで取得した password の値を (引用符なしで) 使用します。Use the password value from the previous command (without quotes).

    <servers>
       <server>
          <id>wingtiptoysregistry.azurecr.io</id>
          <username>wingtiptoysregistry</username>
          <password>AbCdEfGhIjKlMnOpQrStUvWxYz</password>
       </server>
    </servers>
    
  5. Spring Boot アプリケーションの完了プロジェクト ディレクトリ ("C:\SpringBoot\gs-spring-boot-docker\complete" や " /home/GenaSoto/SpringBoot/gs-spring-boot-docker/complete" など) に移動し、pom.xml ファイルをテキスト エディターで開きます。Navigate to the completed project directory for your Spring Boot application (for example, "C:\SpringBoot\gs-spring-boot-docker\complete" or "/home/GenaSoto/SpringBoot/gs-spring-boot-docker/complete"), and open the pom.xml file with a text editor.

  6. pom.xmlファイル内の <properties> コレクションを、Azure Container Registry のログイン サーバーの値で更新します。Update the <properties> collection in the pom.xml file with the login server value for your Azure Container Registry.

    <properties>
       <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix>
       <java.version>1.8</java.version>
    </properties>
    
  7. pom.xmlファイル内の <plugins> コレクションを、<plugin> にログイン サーバーのアドレスと Azure Container Registry のレジストリ名が含まれるように更新します。Update the <plugins> collection in the pom.xml file so that the <plugin> contains the login server address and registry name for your Azure Container Registry.

    <plugin>
      <groupId>com.spotify</groupId>
      <artifactId>dockerfile-maven-plugin</artifactId>
      <version>1.3.4</version>
      <configuration>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <serverId>${docker.image.prefix}</serverId>
        <registryUrl>https://${docker.image.prefix}</registryUrl>
      </configuration>
    </plugin>
    
  8. Spring Boot アプリケーション用の完了プロジェクト ディレクトリに移動し、次の Maven コマンドを実行して Docker コンテナーを作成し、そのイメージをレジストリにプッシュします。Navigate to the completed project directory for your Spring Boot application, and run the following Maven command to build the Docker container and push the image to your registry:

    mvn package dockerfile:build -DpushImage
    

    次のように、Maven にビルドの結果が表示されます。Maven will display the results of your build; for example:

    [INFO] ----------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ----------------------------------------------------
    [INFO] Total time: 38.113 s
    [INFO] Finished at: 2017-09-15T02:00:00-07:00
    [INFO] Final Memory: 47M/338M
    [INFO] ----------------------------------------------------
    

Fabric8 Maven プラグインを使用するように Spring Boot アプリを構成するConfigure your Spring Boot app to use the Fabric8 Maven plugin

  1. Spring Boot アプリケーションの完了プロジェクト ディレクトリ ("C:\SpringBoot\gs-spring-boot-docker\complete" や " /home/GenaSoto/SpringBoot/gs-spring-boot-docker/complete" など) に移動し、pom.xml ファイルをテキスト エディターで開きます。Navigate to the completed project directory for your Spring Boot application, (for example: "C:\SpringBoot\gs-spring-boot-docker\complete" or "/home/GenaSoto/SpringBoot/gs-spring-boot-docker/complete"), and open the pom.xml file with a text editor.

  2. pom.xml ファイル内の <plugins> コレクションを更新して、Fabric8 Maven プラグインを追加します。Update the <plugins> collection in the pom.xml file to add the Fabric8 Maven plugin:

    <plugin>
      <groupId>io.fabric8</groupId>
      <artifactId>fabric8-maven-plugin</artifactId>
      <version>3.5.30</version>
      <configuration>
        <ignoreServices>false</ignoreServices>
        <registry>${docker.image.prefix}</registry>
      </configuration>
    </plugin>
    
  3. Spring Boot アプリケーションのメイン ソース ディレクトリ ("C:\SpringBoot\gs-spring-boot-docker\complete\src\main" や " /home/GenaSoto/SpringBoot/gs-spring-boot-docker/complete/src/main" など) に移動し、"fabric8" という名前の新しいフォルダーを作成します。Navigate to the main source directory for your Spring Boot application, (for example: "C:\SpringBoot\gs-spring-boot-docker\complete\src\main" or "/home/GenaSoto/SpringBoot/gs-spring-boot-docker/complete/src/main"), and create a new folder named "fabric8".

  4. 新しい fabric8 フォルダー内に 3 つの YAML フラグメント ファイルを作成します。Create three YAML fragment files in the new fabric8 folder:

    a.a. deployment.yml という名前のファイルを作成し、内容を次のようにします。Create a file named deployment.yml with the following contents:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: ${project.artifactId}
      labels:
        run: gs-spring-boot-docker
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: gs-spring-boot-docker
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
        type: RollingUpdate
      template:
        metadata:
          labels:
            run: gs-spring-boot-docker
        spec:
          containers:
          - image: ${docker.image.prefix}/${project.artifactId}:latest
            name: gs-spring-boot-docker
            imagePullPolicy: Always
            ports:
            - containerPort: 8080
          imagePullSecrets:
            - name: mysecrets
    

    b.b. secrets.yml という名前のファイルを作成し、内容を次のようにします。Create a file named secrets.yml with the following contents:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecrets
      namespace: default
      annotations:
        maven.fabric8.io/dockerServerId:  ${docker.image.prefix}
    type: kubernetes.io/dockercfg
    

    c.c. service.yml という名前のファイルを作成し、内容を次のようにします。Create a file named service.yml with the following contents:

    apiVersion: v1
    kind: Service
    metadata:
      name: ${project.artifactId}
      labels:
        expose: "true"
    spec:
      ports:
      - port: 80
        targetPort: 8080
      type: LoadBalancer
    
  5. 次の Maven コマンドを実行して、Kubernetes リソース リスト ファイルを構築します。Run the following Maven command to build the Kubernetes resource list file:

    mvn fabric8:resource
    

    このコマンドは、src/main/fabric8 フォルダー下のすべての Kubernetes リソース yaml ファイルを、Kubernetes リソース リストを含む YAML ファイルにマージします。このマージ後のファイルを Kubernetes クラスターに直接適用、または Helm グラフにエクスポートすることができます。This command merges all Kubernetes resource yaml files under the src/main/fabric8 folder to a YAML file that contains a Kubernetes resource list, which can be applied to Kubernetes cluster directly or export to a helm chart.

    次のように、Maven にビルドの結果が表示されます。Maven will display the results of your build; for example:

    [INFO] ----------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ----------------------------------------------------
    [INFO] Total time: 16.744 s
    [INFO] Finished at: 2017-09-15T02:35:00-07:00
    [INFO] Final Memory: 30M/290M
    [INFO] ----------------------------------------------------
    
  6. 次の Maven コマンドを実行して、リソース リスト ファイルを Kubernetes クラスターに適用します。Run the following Maven command to apply the resource list file to your Kubernetes cluster:

    mvn fabric8:apply
    

    次のように、Maven にビルドの結果が表示されます。Maven will display the results of your build; for example:

    [INFO] ----------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ----------------------------------------------------
    [INFO] Total time: 14.814 s
    [INFO] Finished at: 2017-09-15T02:41:00-07:00
    [INFO] Final Memory: 35M/288M
    [INFO] ----------------------------------------------------
    
  7. クラスターにアプリがデプロイされたら、次のように、kubectl アプリケーションを使用して外部 IP アドレスを照会します。Once the app is deployed to the cluster, query the external IP address using the kubectl application; for example:

    kubectl get svc -w
    

    次のように、内部および外部の IP アドレスが kubectl に表示されます。kubectl will display your internal and external IP addresses; for example:

    NAME                    CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    kubernetes              10.0.0.1     <none>        443/TCP        19h
    gs-spring-boot-docker   10.0.242.8   13.65.196.3   80:31215/TCP   3m
    

    外部 IP アドレスを使用して、Web ブラウザーでアプリケーションを開くことができます。You can use the external IP address to open your application in a web browser.

    サンプル アプリケーションを外部で参照する

Kubernetes クラスターの削除Delete your Kubernetes cluster

Kubernetes クラスターが不要になったら、az group delete コマンドを使用してリソース グループを削除することができます。これにより、その関連リソースがすべて削除されます。次に例を示します。When your Kubernetes cluster is no longer needed, you can use the az group delete command to remove the resource group, which will remove all of its related resources; for example:

az group delete --name wingtiptoys-kubernetes --yes --no-wait

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.

その他のリソースAdditional Resources

Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。For more information about using Spring Boot applications on Azure, see the following articles:

Java での Azure の使用の詳細については、「Java 開発者向けの Azure」および「Azure DevOps と Java の操作」を参照してください。For more information about using Azure with Java, see the Azure for Java Developers and the Working with Azure DevOps and Java.

Docker サンプル プロジェクトでの Spring Boot の詳細については、Docker での Spring Boot の使用開始に関するページを参照してください。For further details about the Spring Boot on Docker sample project, see Spring Boot on Docker Getting Started.

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

単純な Spring Boot アプリケーションの作成開始の詳細については、「Spring Initializr」(https://start.spring.io/) を参照してください。For more information about getting started with creating a simple Spring Boot application, see the Spring Initializr at https://start.spring.io/.

Azure でカスタム Docker イメージを使用する方法に関するその他の例については、「Azure Web App on Linux 向けのカスタム Docker イメージを使用する」を参照してください。For additional examples for how to use custom Docker images with Azure, see Using a custom Docker image for Azure Web App on Linux.