Spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置。另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包是一个可以独立运行的部署单元。基于以上特性,现在普遍认为Spring Boot提供了一种快速构造微服务(Micro-Service)的能力。
Docker与Spring Boot
Docker是一种Linux容器的实现,Linux容器是基于进程的轻量级资源隔离技术,每一个容器对应操作系统中的一个进程,但是它又会有自己的网络空间、文件系统、PID等。Docker除了实现Linux容器,还使得容器具有“社会化”的功能,用户可以将容器镜像发布在Docker Hub与其他开发者共享、协作。安装Docker的教程请参考官方文档
Spring Boot应用通常被构建为一个可单独执行的jar包,通过java -jar ...
运行,但是框架本身并没有提供以服务形式运行在后台的方法,通常需要借助Systemd, Supervisord等进程管理工具来实现。另一方面,虽然应用运行环境非常的简单,但是将他们容器化为Docker容器镜像并运行,对于自动化部署、运维都是非常有利的。
本文将以一个最简单的Spring Boot开发的Web应用为例,讲解如何将其容器化运行。本文的重点是构建Docker镜像、运行Docker容器,关于Spring Boot开发Web应用可以参考Spring Boot应用开发
构建并Spring Boot应用
在应用代码编写完成后,可以直接将其打包并运行:
- Maven:
mvn package && java -jar target/spring-boot-docker-0.1.0.jar
- Gradle:
gradle build && java -jar build/libs/gs-spring-boot-docker-0.1.0.jar
在浏览器地址栏种输入[http://localhost:8080/](http://localhost:8080/)
可以访问应用
Dockerfile构建镜像
Docker提供了Dockerfile格式的文件来构建应用镜像,现在开始创建一个Spring Boot应用的Dockerfile:
FROM java:8
VOLUME /tmp
ADD spring-boot-docker-0.1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
java:8
是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM
指令直接获取它的状态——也就是在容器中java
是已经安装的,接下来通过自定义的命令来运行Spring Boot应用:
-
VOLUME /tmp
创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp
作为工作目录 -
ADD spring-boot-docker-0.1.0.jar app.jar
将应用jar包复制到/app.jar
-
ENTRYPOINT
表示容器运行后默认执行的命令
Dockerfile非常的简单,编辑完成后运行docker构建镜像命令:
docker build -t tmy/spring-boot-app .
然后运行Docker容器:
docker run -d -p 8080:8080 --name sample-app tmy/spring-boot-app
其中-d
表示后台运行容器,这也就自然地解决的Spring Boot不支持后台运行应用程序的问题。-p 8080:8080
表示将容器内部的8080端口映射到宿主机器的8080端口,这样就可以通过宿主机器直接访问应用。--name sample-app
给容器取一个容易记住的名字方便日后管理。
使用Maven/Gradle创建Docker镜像
为了方便Java开发者创建Docker镜像,Maven/Gradle都提供了响应的插件。
Maven
<properties>
<docker.image.prefix>springio</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.2.3</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
上述pom.xml
包含了docker-maven-plugin
的配置:
-
imageName
指定了镜像的名字 -
dockerDirectory
指定Dockerfile的位置 -
resources
是指那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用jar包需要纳入
经过以上配置后,运行下列命令可以在本地Docker中创建一个镜像:
$ mvn package docker:build
Gradle
Gradle同样也有支持Docker的插件:
buildscript {
...
dependencies {
...
classpath('se.transmode.gradle:gradle-docker:1.2')
}
}
group = 'springio'
...
apply plugin: 'docker'
task buildDocker(type: Docker, dependsOn: build) {
push = true
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
上述配置和Maven基本类似,执行以下命令构建镜像:
$ gradle build buildDocker
https://www.tianmaying.com/tutorial/spring-boot-docker
相关推荐
spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置。另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包是一个可以独立运行的...
Docker-Compose 是一个用于定义和运行多容器的工具,允许开发者快速定义和部署多容器应用程序。 知识点5: Maven plug-in Maven 是一个项目管理工具,提供了丰富的插件和依赖管理功能。Docker-Maven-Plugin 是一个...
主要介绍了详解如何将Spring Boot应用跑在Docker容器中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
简单的休息服务这是在docker容器中部署的spring boot中运行的简单rest服务。 关于Spring Boot的很棒的事情是您不必在servlet容器中部署战争。 这个Spring启动应用程序已经嵌入了tomcat,并将您的控制器直接连接到...
在IT行业中,微服务架构已经成为了现代应用开发的主流趋势,Spring Boot、Spring Cloud和Docker作为其中的关键技术,各自扮演着重要的角色。本实战指南将深入探讨这三者的使用和整合,帮助开发者构建高效、可扩展的...
10. **容器化支持**:Spring Boot应用可以轻松地部署到Docker等容器平台,增强了其部署的灵活性。 11. **Spring Boot CLI**:命令行工具提供了便捷的命令行接口,可以快速启动一个Spring应用。 12. **错误处理**:...
容器化部署,如Docker和Kubernetes,也是现代Spring Boot项目常见的部署方式,资料中可能包含相关指导。 总之,这份压缩包中的Spring Boot资料和项目实例是学习和提升Spring Boot技术的全面资源。通过深入学习和...
* 使用Spring Boot框架可以快速开发Web应用程序,并将其部署到Docker容器中。 七、微服务架构的落地 * 使用微服务架构可以实现系统的高度可扩展性和灵活性。 * 使用微服务架构可以实现系统的高可用性和高可靠性。 ...
教程内容涵盖了Docker的基本概念、环境准备、创建Spring Boot应用、编写Dockerfile、构建Docker镜像、运行Docker容器、以及使用Docker Compose进行多容器管理等技术点。 每个技术点都配有详细的步骤和源码案例,以...
都说docker是一个容器,跨平台,简化部署,docker可以把编写的项目,环境依赖,例如jdk,jar包等所需的东西,都在一个文件中记录下来,然后执行这一个文件来生成镜像,镜像运行的实例称为容器,网上很形象的说法是 ...
《Spring Boot实战派》源码提供了丰富的学习材料,旨在帮助开发者深入理解并...通过分析《Spring Boot实战派》源码,读者不仅可以了解上述技术点,还能学习到如何在实际项目中应用这些技术,提升开发效率和代码质量。
该项目以名为Anime Hub的博客Web应用程序的形式演示了Spring Boot、Spring Security、Spring mvc、Docker容器的实现.zip
书中会介绍如何打包Spring Boot应用为可执行JAR,以及如何在这些平台上部署和管理应用。 最后,你将学习到如何监控和管理Spring Boot应用,例如使用Actuator提供的健康检查、指标收集、审计日志等功能。 总的来说...
8. **部署与运行**:讨论如何打包Spring Boot应用为可执行JAR或WAR文件,以及如何在Docker容器、云平台(如Heroku)上部署应用。 9. **微服务架构**:可能涉及如何使用Spring Cloud构建微服务,包括服务发现、配置...
在实际项目中,书中可能会提到如何利用Spring Boot与Docker结合,实现应用的容器化部署,以及如何使用持续集成工具如Jenkins进行自动化构建和部署。最后,书中的最佳实践和经验分享部分,将指导读者如何优化Spring ...
4. **容器化**:深入探讨如何将 Spring Boot 应用容器化,使用 Docker 和 Kubernetes 进行部署。 5. **故障排查与日志分析**:提供关于如何调试和分析 Spring Boot 应用的技巧,以及日志管理和分析工具的使用。 6....