将 Spring Boot 应用程序部署到 Linux 的 Azure 应用服务上

本教程介绍如何使用 DockerSpring Boot 应用程序容器化并将自己的 docker 映像部署到 Azure 应用服务中的 Linux 主机。

先决条件

完成本教程中的步骤需要具备以下先决条件:

注意

由于本教程中的虚拟化要求,无法在虚拟机上执行本文中的步骤;必须使用启用了虚拟化功能的物理计算机。

创建 Docker 上的 Spring Boot 入门 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 容器注册表以用作专用 Docker 注册表

以下步骤将引导用户完成使用 Azure 门户来创建 Azure 容器注册表的过程。

注意

如果想要使用 Azure CLI(而不是 Azure 门户),请按照使用 Azure CLI 2.0 创建专用 Docker 容器注册表中的步骤操作。

  1. 浏览到 Azure 门户并登录。

    登录到 Azure 门户 上的帐户后,请按照使用 Azure 门户 文章创建专用 Docker 容器注册表中的步骤操作,为方便起见,以下步骤将介绍这些步骤。

  2. 单击“新建”的菜单图标,选择“容器”,然后选择“Azure 容器注册表”

    Create a new Azure Container Registry

  3. 显示“创建容器注册表”页面时,请输入注册表名称、订阅、资源组和位置。 然后选择“创建”。

    Configure Azure Container Registry settings

  4. 选择“设置”下的“访问密钥”,并开启“管理员用户”后面的“启用”开关

    Enable admin user UI in the Azure portal

配置 Maven 以将映像生成到 Azure 容器注册表

  1. 导航到 Spring Boot 应用程序的完整项目目录(例如,“C:\SpringBoot\gs-spring-boot-docker\complete”或“/users/robert/SpringBoot/gs-spring-boot-docker/complete”),并使用文本编辑器打开 pom.xml 文件。

  2. 使用本教程上一部分提供的最新版 jib-maven-plugin、登录服务器值以及 Azure 容器注册表的访问设置更新 pom.xml 文件中的 <properties> 集合。 例如:

    <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. jib-maven-plugin 添加到 pom.xml 文件中的 <plugins> 集合。 此示例使用版本 3.2.0。

    <from>/<image> 中指定基本映像(此处为 mcr.microsoft.com/openjdk/jdk:11-ubuntu)。 指定要从 <to>/<image> 中的基本映像生成的最终映像的名称。

    身份验证 {docker.image.prefix} 是之前显示的注册表页上的登录服务器{project.artifactId} 是项目的第一个 Maven Build 中的 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 容器注册表:

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

注意

  1. 该命令az acr login ...将尝试登录到Azure 容器注册表,否则需要提供 <username> jib-maven-plugin<password>,请参阅 jib 中的身份验证方法
  2. 使用 Jib 将映像推送到Azure 容器注册表时,映像不会使用 Dockerfile,请参阅本文档了解详细信息。

在 Azure 应用服务中使用容器映像创建 Linux 上的 Web 应用

  1. 浏览到 Azure 门户并登录。

  2. 单击“创建资源”的菜单图标,选择“计算”,然后选择“Web 应用”

    Create a new web app in the Azure portal

  3. 当显示“Linux 上的 Web 应用”页时,输入以下信息:

    • 从下拉列表中选择一个订阅

    • 选择现有资源组,或指定名称以创建新资源组。

    • 为“应用名称”输入唯一名称;例如:“wingtiptoyslinux”

    • 对于“发布”,请指定 Docker Container

    • 选择“Linux”作为“操作系统”

    • 选择“区域”

    • 接受“Linux 计划”并选择现有的“应用服务计划”,或者选择“新建”,创建新的应用服务计划

    • 单击“ 下一步:Docker”。

    Click the Next: Docker button to proceed.

    在“Web 应用”页上选择“Docker”,并输入以下信息:

    • 选择“单个容器”

    • 注册表:选择容器,例如:“wingtiptoysregistry

    • 映像:选择之前创建的映像,例如:“spring-boot-docker”

    • 标记:选择映像的标记;例如:“latest

    • 启动命令:将它保留为空,因为映像已具有启动命令

    输入上述所有信息后,选择“ 查看 + 创建”。

    Finish by selecting Review + Create.

    • 选择“查看 + 创建”。

查看信息,然后选择“创建”。

部署完成后,选择转到资源。 部署页将显示用于访问应用程序的 URL。

Get URL of deployment

注意

Azure 会将 Internet 请求自动映射到在端口 80 上运行的嵌入式 Tomcat 服务器。 但是,如果已将嵌入式 Tomcat 服务器配置为在端口 8080 或自定义端口上运行,则需将一个环境变量添加到为嵌入式 Tomcat 服务器定义端口的 Web 应用。 为此,请按照以下步骤操作:

  1. 浏览到 Azure 门户并登录。

  2. 选择“Web 应用”的图标,然后从“应用程序服务”页选择应用

  3. 在左侧导航窗格中选择“配置”

  4. 在“应用程序设置”部分,添加一个名为 WEBSITES_PORT 的新设置,并为该值输入自定义端口号。

  5. 选择“确定”。 再选择“保存”。

Saving a custom port number in the Azure portal

清理资源

如果不再需要,请使用 Azure 门户删除本文中创建的资源,以避免产生意外的费用。

后续步骤

若要了解有关 Spring 和 Azure 的详细信息,请继续访问“Azure 上的 Spring”文档中心。

另请参阅

有关使用 Azure 上的 Spring Boot 应用程序的详细信息,请参阅以下文章:

有关如何将 Azure 与 Java 配合使用的详细信息,请参阅面向 Java 开发人员的 Azure使用 Azure DevOps 和 Java

有关 Docker 上的 Spring Boot 示例项目的详细信息,请参阅 Docker 上的 Spring Boot 入门

如果在开始使用自己的 Spring Boot 应用程序时需要帮助,请参阅 https://start.spring.io/ 上的 Spring Initializr

有关开始创建简单 Spring Boot 应用程序入门的详细信息,请参阅 https://start.spring.io/ 上的“Spring Initializr”。

有关如何使用 Azure 的自定义 Docker 映像的其他示例,请参阅使用 Linux 上 Azure Web 应用的自定义 Docker 映像