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

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

先决条件

若要完成本教程中的步骤,需要满足以下先决条件:

注意

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

在 Docker 入门 Web 应用上创建 Spring Boot

以下步骤逐步讲解创建简单的 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

    在本地浏览示例应用

创建用作专用 Docker 注册表的 Azure 容器注册表

以下步骤逐步讲解如何使用 Azure 门户创建 Azure 容器注册表。

注意

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

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

    登录到 Azure 门户上的帐户后,请按照使用 Azure 门户创建专用 Docker 容器注册表文章中的步骤进行操作;为了方便起见,接下来的步骤中改述了这些步骤。

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

    创建新的 Azure 容器注册表

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

    配置 Azure 容器注册表设置

  4. 设置下面选择访问密钥,并在管理员用户后面打开已启用开关。

    在 Azure 门户中启用管理员用户 UI

配置 Maven 以构建映像并将其推送到您的 Azure 容器注册表

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

  2. 使用本教程上一部分中 Azure 容器注册表的最新版本的 jib-maven-plugin、登录服务器值和访问设置更新 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 内部版本的 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 容器注册表,否则需要为 jib-maven-plugin 提供 <username><password>,请参阅 jib 中的 身份验证方法
  2. 使用 Jib 将映像推送到 Azure 容器注册表时,映像不会使用 Dockerfile。 有关详细信息,请参阅文档。

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

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

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

    在 Azure 门户中创建新的 Web 应用

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

    • 选择下拉列表中的订阅

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

    • 输入应用名称的唯一名称;例如:wingtiptoyslinux

    • 指定 Docker Container 以进行发布

    • 对于“操作系统”字段,请选择 Linux

    • 选择区域

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

    • 单击“下一步”:Docker

    单击“下一步:Docker”按钮继续。

    Web 应用 页上,选择 Docker,然后输入以下信息:

    • 选择单个容器

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

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

    • 标签:选择图像的标签,例如:最新

    • 启动命令:将其留空,因为镜像中已经包含启动命令。

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

    选择“审阅 + 创建”以完成 选择“查看 + 创建”完成操作。

    • 选择“查看 + 创建”。

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

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

获取部署的 URL 的 URL

注意

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

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

  2. 选择 Web 应用的图标,然后从 应用服务 页中选择应用。

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

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

  5. 选择“确定”。 然后选择保存

在 Azure 门户中保存自定义端口号

清理资源

不再需要时,请使用 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。

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