如何将Spring Boot应用程序Docker化

106 阅读4分钟

在本教程中,学习如何在docker容器中配置和运行一个spring boot应用程序。我们将通过适当的代码实例一步一步地学习整个过程。

  1. 1.前提条件
  2. 2.验证Docker安装
  3. 3.创建一个Spring Boot应用程序
  4. 4.创建Spring Boot应用程序的可执行JAR
  5. 5.创建Docker文件
  6. 6.创建Docker镜像
  7. 7.运行Spring Boot Docker镜像
  8. 8.总结

1.先决条件

我们假定你知道docker,并且它已经安装在你的本地机器上。如果你不知道docker,那么现在你可以把它看成是一个提供运行环境的容器,包括项目/应用程序的所有工具和依赖。所有这些东西都被打包成一个单元,这样我们就可以运行应用程序,而不用太担心依赖性和兼容性的问题。

要下载docker,你可以参考其官方网站。它提供了所有主要平台的可执行文件,如Windows、macOS和Linux。

2.验证Docker的安装

在进一步行动之前,我们建议检查docker是否已经正确安装。我们可以在cmd/terminal中使用以下命令,显示其客户端和服务器版本。也可以看下面的截图。

$ docker version

一切顺利!Docker已经安装完毕。

现在,让我们开始一步一步地将一个spring boot应用程序dockerize。整个过程包括以下步骤。

  • 创建一个Spring Boot应用程序
  • 创建一个可执行的JAR文件
  • 创建一个Dokerfile
  • 创建Docker镜像
  • 运行Docker Image

3.创建一个Spring Boot应用程序

要创建一个Spring Boot应用程序,有几种方法,但我们建议使用Spring的官方在线工具 -start.spring.io/。

在这里,我们不打算解释如何创建一个Spring Boot应用程序,因为我们已经有一篇详细的文章。因此,我们建议你参考我们在这里的详细文章:创建spring boot hello应用程序

在这篇文章中,我们创建了一个基于maven的spring boot应用程序,名为 春天停靠器的应用程序,其中包含所有文件,包括SpringDockerApplication.java 类。在这个类中,我们增加了一个名为*index()*的方法。我们还用@RestController注解标记了这个类,以获得API响应。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringDockerApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringDockerApplication.class, args);
	}
	@GetMapping("/home")
	public String index() {
		return "Spring Application is Running...";
	}
}

默认情况下,spring boot应用程序在端口号8080上运行,如果你从浏览器中请求*https://localhost:8080/home*,那么它将向浏览器显示**"***Spring应用程序正在运行...***"**消息。

4.创建Spring Boot应用程序的可执行JAR文件

要创建基于maven的Spring应用程序的JAR文件,我们可以使用一个命令。

$ mvn clean install 

这将在项目的目标目录下创建一个JAR文件。关于创建JAR文件的更多细节,我们可以参考这里的详细文章。如何创建JAR文件。

默认情况下,创建的JAR文件的名称与应用程序的名称相同,但如果你想给它另一个名称,那么在pom.xml文件中使用**标签**,像这样。

<build>
	<finalName>springDocker</finalName>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

现在,转到下一步,创建一个docker文件到应用程序的根文件夹中。

5.创建Docker文件

这是主要的docker文件,包含了使spring boot应用程序dockerize的所有指令。因此,在应用程序的根目录下创建一个 dockerfile在应用程序的根目录下创建一个

Note: Don’t add any extension to dockerfile. Docker recognizes the file by this name only.

dockerfile中添加部署指令。Docker提供了内置的指令命令,我们可以用它来管理docker镜像。其中一些是FROM、ADD、ENTRYPOINT、CMD,等等。

FROM openjdk:11
LABEL maintainer ="howtodoinjava"
ADD target/springDocker-0.0.1-SNAPSHOT.jar springDocker-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","springDocker-0.0.1-SNAPSHOT.jar"]
  • FROM命令从docker库中导入Java镜像到我们的容器中,以便我们的spring boot应用程序可以运行。
  • LABEL命令指定了这个镜像的标签,ADD命令用来将我们的spring boot应用程序的JAR文件添加到docker容器中。
  • ENTRYPOINT是用来指定运行命令的。我们可以注意到,这些字符串阵列组合成一个命令,我们通常用它来从cmd/终端运行JAR文件。这个命令将我们的spring boot应用程序执行到docker容器中。

确保Docker文件的所有指令都是大写的。

6.创建Docker镜像

现在,创建一个docker镜像,将所有这些文件(JAR和Dockerfile)合并为一个单元。在docker术语中,它被称为一个镜像,在docker容器中独立执行。

为了创建一个镜像,docker提供了以下命令。

$ docker build – t springdocker:latest .

这将在docker容器中创建一个镜像。 -t 标志用于为镜像设置一个标签,冒号(:)用于设置标签名称,而点(.)指的是当前目录。

你可以通过使用下面的命令来检查创建的图像。

$ docker images

这个命令将显示所有图像的列表,包括标签、大小和时间。

7.运行Spring Boot Docker镜像

现在,通过使用以下命令来运行镜像。

$ docker run -p 8090:8080 springdocker 

在这里,我们使用**-p标志**来指定端口号,我们将端口8080映射到8090。由于tomcat默认运行在8080端口,所以我们将这个请求映射到另一个端口。

springdocker是我们在上面的步骤中刚刚创建的docker镜像的名称。

通过在浏览器中使用*http://localhost:8090/home*URL来测试该应用程序。它应该返回与非docker化执行时相同的输出。

为了供你参考,我们附上了这个应用程序的项目结构。因此,你可以得到将文件放在正确的文件夹中的实际想法。

8.结论

在这个docker教程中,我们已经成功创建了一个spring boot应用程序,并在docker容器中运行。如果你熟悉docker的基础知识,这个过程是很容易的。

学习愉快!!