本教程介绍如何使用 Docker 将 Spring Boot 应用程序容器化,并将自己的 Docker 映像部署到 Azure 应用服务 中的 Linux 主机。
先决条件
若要完成本教程中的步骤,需要满足以下先决条件:
- Azure订阅;如果还没有Azure订阅,请激活 MSDN 订阅者权益或注册免费Azure帐户。
- Azure 命令行接口 (CLI)。
- 一个受支持的 Java 开发工具包 (JDK)。 有关在 Azure 上进行开发时可供使用的 JDK 的详细信息,请参阅 Azure 和 Azure Stack 上的 Java 支持。
- Apache Maven 生成工具(版本 3)。
- Git 客户端。
- Docker 客户端。
注意
由于本教程的虚拟化要求,无法在虚拟机上执行本文中的步骤。 必须使用启用了虚拟化功能的物理计算机。
在 Docker 入门 Web 应用上创建 Spring Boot
以下步骤将介绍创建一个简单的 Spring Boot Web 应用程序并在本地进行测试所需的步骤。
打开命令提示符并创建一个用于保存应用程序的本地目录,并更改为该目录;例如:
mkdir SpringBoot cd SpringBoot将 Docker 上的 Spring Boot 入门示例项目克隆到你创建的目录中;例如:
git clone https://github.com/spring-guides/gs-spring-boot-docker.git将目录切换到已完成的项目,例如:
cd gs-spring-boot-docker/complete使用 Maven 生成 JAR 文件;例如:
mvn package创建 Web 应用后,将目录更改为
targetJAR 文件所在的目录并启动 Web 应用;例如:cd target java -jar spring-boot-docker-complete-0.0.1-SNAPSHOT.jar --server.port=80使用 Web 浏览器在本地浏览测试该 Web 应用。 例如,如果有 curl 可用,并将 Tomcat 服务器配置为在 80 端口上运行:
curl http://localhost将显示以下消息: Hello Docker World
创建用作专用 Docker 注册表的Azure 容器注册表
以下步骤将介绍如何使用 Azure 门户创建 Azure 容器注册表。
注意
如果要使用 Azure CLI 而不是 Azure 门户,请按照使用 Azure CLI 2.0 创建专用 Docker 容器注册表中的步骤进行操作。
浏览到 Azure 门户并登录。
在Azure门户中登录到帐户后,请按照Azure门户文章创建专用 Docker 容器注册表中的步骤进行操作。 为了方便起见,以下步骤对这些说明进行了解释。
选择“新建”菜单图标,选择“容器”,然后选择Azure 容器注册表。
出现 “创建容器注册表 ”页时,输入 注册表名称、 订阅、 资源组和 位置。 然后选择“创建”。
在“设置”下选择“访问密钥”,并为管理员用户打开“已启用”开关。
配置 Maven 以构建映像并将其推送到您的 Azure 容器注册表
转到 Spring Boot 应用程序的已完成项目目录 (例如 C:\SpringBoot\gs-spring-boot-docker\complete 或 /users/robert/SpringBoot/gs-spring-boot-docker/complete ),并使用文本编辑器打开 pom.xml 文件。
使用本教程上一部分中的 的最新版本、登录服务器值和 Azure 容器注册表 的访问设置,更新
jib-maven-plugin文件中的<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>将
jib-maven-plugin添加到<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>转到 Spring Boot 应用程序的已完成项目目录,并运行以下命令以重新生成应用程序并将容器推送到Azure 容器注册表:
az acr login --name wingtiptoysregistry && mvn compile jib:build
注意
该命令az acr login ...尝试登录到Azure 容器注册表。 否则,需要为 jib-maven-plugin 提供 <username> 和 <password>。 若要了解详细信息,请参阅 jib 中的 身份验证方法 。
使用 Jib 将映像推送到Azure 容器注册表时,映像不使用 Dockerfile。 有关详细信息,请参阅 本文 。
使用容器映像在 Linux 上Azure 应用服务上创建 Web 应用
浏览到 Azure 门户并登录。
选择“ 创建资源”菜单图标,选择“ 计算”,然后选择 “Web 应用”。
出现 Linux 上的 Web 应用 页面时,输入以下信息:
选择下拉列表中的订阅。
选择现有的资源组,或指定一个名称以创建新的资源组。
输入 应用名称的唯一名称;例如: wingtiptoyslinux。
指定
Docker Container以进行发布。对于“操作系统”字段,请选择 Linux。
选择区域。
接受“Linux 计划”并选择现有的应用服务计划,或选择新建以创建新的应用服务计划。
选择 “下一步:Docker”。
在“Web 应用”页上,选择“Docker”,然后输入以下信息:
选择单个容器。
注册表:选择您的容器,例如:wingtiptoysregistry。
镜像:选择之前创建的镜像,例如:spring-boot-docker。
标签:选择图像的标签,例如:最新。
启动命令:将它保留为空白,因为映像已具有启动命令。
输入上述所有信息后,选择“ 查看 + 创建”。
选择“审阅 + 创建”以完成

- 选择“查看 + 创建”。
查看信息,然后选择“创建”。
部署完成后,选择“ 转到资源”。 部署页将显示用于访问应用程序的 URL。
的 URL
注意
Azure自动将 Internet 请求映射到端口 80 上运行的嵌入式 Tomcat 服务器。 但是,如果将嵌入式 Tomcat 服务器配置为在端口 8080 或自定义端口上运行,则需要将环境变量添加到 Web 应用,用于定义嵌入式 Tomcat 服务器的端口。 若要添加环境变量,请使用以下步骤:
浏览到 Azure 门户并登录。
选择“Web 应用”图标,然后从“应用程序服务”页中选择应用。
在左侧导航窗格中,选择配置。
在“应用程序设置”部分中,添加名为“WEBSITES_PORT”的新设置,然后输入值的自定义端口号。
选择“确定”。 然后选择保存。
清理资源
不再需要资源时,请使用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 映像。