Learn How to Package a Spring Boot Application as a Docker Container
Docker是用于创建容器的流行平台-一组标准化的软件单元,可在单个程序包中组合代码,运行时,依赖项,设置和初始化,您可以在一个计算环境中可靠地运行该程序。 将应用程序部署为Docker容器可帮助您在多个环境(即开发,质量检查,分段,生产)中平稳地移动应用程序。
本教程向您展示如何利用Docker部署Spring Boot应用程序。
您需要什么:
Java 8+:使用SDKMAN或直接从AdoptOpenJDK安装
Docker:我推荐Docker Desktop
一个免费的Okta开发人员帐户:稍后会有更多信息
您可能也有兴趣:Spring Boot:在Docker中运行和构建
创建一个Spring Boot应用
您将在简单的命令行HTTP客户端HTTPie的帮助下使用Spring Initializr生成Spring Boot项目。
如果您不想使用命令行,则可以直接使用Spring Initializr网站。
在命令行中,只需输入:
1 2 3 4 5 | http https://start.spring.io/starter.zip \ dependencies==web,okta \ groupId==com.okta.spring-docker.demo \ packageName==com.okta.spring-docker.demo \ --download |
然后解压缩下载的文件。
1 2 | unzip demo.zip -d spring-boot-docker cd spring-boot-docker |
接下来,您将通过创建文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package com.okta.springdocker.demo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController public class WebController { @RequestMapping("/") public String home() { return"Welcome!"; } } |
您还需要为此项目配置安全设置。 目前,您将要允许所有请求,因此将您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.okta.springdocker.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Configuration static class OktaOAuth2WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().permitAll(); } } } |
您可以使用以下命令编译和运行您的应用程序:
1 2 | ./mvnw package java -jar target/demo-0.0.1-SNAPSHOT.jar |
然后,如果您按下
将您的Spring Boot应用程序作为Docker容器运行
要将应用程序作为Docker容器运行,第一步是安装Docker。
安装后,该构建容器了。 为此,Docker使用了一个描述如何组装容器的文件,称为
注意:访问Dockerfile参考,获得可以使用的所有命令的说明。
对于您的Spring Boot应用程序,您将使用一个简单的
注意:您可以浏览许多社区容器,以此作为DockerHub的基础。
现在,您可以在命令行上构建容器。 在将
1 | docker build . -t okta:spring_boot_docker |
如果一切顺利,您现在可以运行Dockerized应用程序(使用与以前相同的 tag ):
1 | docker run --publish=8080:8080 okta:spring_boot_docker |
要停止容器,请按 CTRL-C 。 验证容器未运行,执行:
1 | docker ps |
这将列出您的计算机上运行的所有容器。 如果您的Spring Boot应用程序仍在运行,则可以使用(使用
1 | docker kill <CONTAINER_ID> |
当您在构建JAR文件时将其复制到容器中时,每次要使用较新版本的应用程序时,都需要重新构建容器。 因此,周期为:
更改您的代码
生成应用程序
构建容器
运行容器
停止容器
环
现在您知道了使用Docker容器运行应用程序的基础知识! 将来,您可以将已构建的容器发布到Docker注册表中(例如DockerHub),以便其他人可以获取该容器并准备运行。
接下来,我们将使用Okta保护应用程序,并了解如何将敏感数据传递到容器。
保护您的Spring Boot和Docker App
您需要具有的Okta免费开发者帐户。 Okta是SaaS(软件即服务)身份管理提供商。 我们可以轻松地向您的应用程序添加单点登录,社交登录和OAuth 2.0等功能。 如果尚未注册,请在我们的网站上注册一个帐户。
完成以下步骤以创建OpenID Connect(OIDC)应用程序。
通过developer.okta.com登录到您的开发人员帐户。
导航到应用程序,然后单击添加应用程序
选择网络,然后点击下一步
为应用程序命名(例如
添加以下作为登录重定向URI:http:// localhost:8080 / login / oauth2 / code / okta
点击完成
Okta需要一些属性才能正常工作,我们将通过Docker将这些属性作为环境变量发送。
更改
1 2 3 4 | @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated(); } |
试一试吧!
首先,编译并构建您的容器。 为了使构建过程正常运行,您需要在命令行中提供Okta信息,以替换
1 | ./mvnw package |
然后构建容器:
1 | docker build . -t okta:spring_boot_docker |
为了立即运行容器,您将Okta信息作为环境变量传递给容器。 这是通过使用
1 2 3 4 5 | docker run --publish=8080:8080 \ -e OKTA_OAUTH2_ISSUER=<org_url>/oauth2/default \ -e OKTA_OAUTH2_client_id=<client_id> \ -e OKTA_OAUTH2_client_secret=<client_secret> \ okta:spring_boot_docker |
现在,如果您按下
了解有关Spring,Docker和安全性的更多信息!
在本教程中,您学习了如何通过手动编写Dockerfile来为Spring Boot应用程序构建Docker容器。 还有一个Maven插件可以为您准备容器。 它叫做Jib,我们将在Java,Docker和Spring Boot的Get Jibby中更详细地介绍。
这篇文章的源代码可以在GitHub上找到。
如果您对此帖子有任何疑问,请添加评论。
进一步阅读
将Spring Boot微服务部署到Docker:快速指南
为Docker优化Spring Boot应用程序