在当今软件开发领域,应用程序的容器化部署已经成为一种流行的选择,Docker 提供了一个强大的容器化解决方案。
将 Spring Boot 项目打包到 Docker 容器中部署,有很多不同的方法,今天就和大家聊一聊如何将Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目
1. Docker安装
我这里使用的CentOS7安装Docker,之前以及介绍过了,这里就不详细介绍,大家可以自行去查看如何安装Docker
Docker 安装成功之后,需要修改 Docker 配置,开启允许远程访问 Docker 的功能,修改 /usr/lib/systemd/system/docker.service 文件,步骤如下:
- 进入docker.service进行编辑
vim /usr/lib/systemd/system/docker.servicevim /usr/lib/systemd/system/docker.servicevim /usr/lib/systemd/system/docker.service
- 添加以下内容
-H tcp://0.0.0.0:2375-H tcp://0.0.0.0:2375-H tcp://0.0.0.0:2375
![一键部署Spring Boot到远程Docker容器 图片[1]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-28.png)
- 配置完成,重启docker
systemctl daemon-reloadservice docker restartsystemctl daemon-reloadservice docker restartsystemctl daemon-reloadservice docker restart
Docker重启之后,Docker准备事情就完成了。
2. IDEA 准备
- 在IDEA中安装Docker插件
File->Settings->Plugins
![一键部署Spring Boot到远程Docker容器 图片[2]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-29.png)
安装好Docker插件后,IDEA 重启
- IDEA 配置Docker 远程连接
File->Settings->Build,Execution,Deployment->Docker 然后配置一下 Docker 的远程连接地址:
tcp://192.168.150.102:2375tcp://192.168.150.102:2375tcp://192.168.150.102:2375
![一键部署Spring Boot到远程Docker容器 图片[3]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-30.png)
配置完成后,会显示 Connection successful 表示链接Docker成功
3.项目准备
3.1. 创建Dockerfile
在项目根目录下创建
Dockerfile
,这是构建Docker镜像的文件,位置如下
![一键部署Spring Boot到远程Docker容器 图片[4]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-31.png)
Dockerfile内容如下:
FROM openjdk:11.0.12VOLUME /tmpADD target/spring-boot-jasypt-demo-1.0-SNAPSHOT.jar app.jarENTRYPOINT ["java","-jar","/app.jar"]FROM openjdk:11.0.12 VOLUME /tmp ADD target/spring-boot-jasypt-demo-1.0-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]FROM openjdk:11.0.12 VOLUME /tmp ADD target/spring-boot-jasypt-demo-1.0-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
文件说明:
- FROM openjdk:11.0.12: 指定了基础镜像。在这里,使用的是 OpenJDK 11.0.12 镜像,它包含了 Java 运行时环境。
- VOLUME /tmp: 这一行创建了一个卷(Volume)/tmp。在容器中,/tmp 将被用作临时目录,用于存储临时文件或其他需要持久化的数据
- ADD target/spring-boot-jasypt-demo-1.0-SNAPSHOT.jar app.jar: 将构建好的 Spring Boot 可执行 JAR 文件复制到容器中,并将其重命名为 app.jar。target/spring-boot-jasypt-demo-1.0-SNAPSHOT.jar 是相对于 Dockerfile 的路径,确保该路径正确
- ENTRYPOINT [“java”,”-jar”,”/app.jar”]: 设置容器启动时执行的默认命令。这里,使用 java -jar /app.jar 启动 Spring Boot 应用程序。这是运行 Spring Boot 应用程序的标准方式。
4.配置Docker-Maven插件
在pom.xml中配置插件,内容如下
<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!-- 镜像地址--><dockerHost>http://192.168.150.102:2375</dockerHost><!-- 镜像前缀--><imageName>zbbmeta/${project.artifactId}</imageName><imageTags><!-- 镜像版本--><imageTag>${project.version}</imageTag></imageTags><forceTags>true</forceTags><dockerDirectory>${project.basedir}</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!-- 镜像地址--> <dockerHost>http://192.168.150.102:2375</dockerHost> <!-- 镜像前缀--> <imageName>zbbmeta/${project.artifactId}</imageName> <imageTags> <!-- 镜像版本--> <imageTag>${project.version}</imageTag> </imageTags> <forceTags>true</forceTags> <dockerDirectory>${project.basedir}</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin><plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.2</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!-- 镜像地址--> <dockerHost>http://192.168.150.102:2375</dockerHost> <!-- 镜像前缀--> <imageName>zbbmeta/${project.artifactId}</imageName> <imageTags> <!-- 镜像版本--> <imageTag>${project.version}</imageTag> </imageTags> <forceTags>true</forceTags> <dockerDirectory>${project.basedir}</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
- execution节点: 配置当执行 mvn package 的时候,顺便也执行一下 docker:build
- configuration节点: 配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。
- resource节点: 配置一下 jar 的位置和名称即可。
5. 打包镜像
对项目使用package进行打包,镜像就可以上传到Docker服务器
![一键部署Spring Boot到远程Docker容器 图片[5]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-32.png)
打包第一次可能时间稍微久一点,因为Docker需要下载基础镜像openjdk:11.0.12
打包日志如下:
![一键部署Spring Boot到远程Docker容器 图片[6]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-33.png)
打包完成后,Docker服务器上就存在了项目镜像
![一键部署Spring Boot到远程Docker容器 图片[7]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-34.png)
6. 镜像运行
运行DOcker镜像方式存在两种方式
1、直接使用Docker命令在服务器上运行
docker run -d --name jasypt-demo -p 8877:8877 zbbmeta/spring-boot-jasypt-demo:1.0-SNAPSHOTdocker run -d --name jasypt-demo -p 8877:8877 zbbmeta/spring-boot-jasypt-demo:1.0-SNAPSHOTdocker run -d --name jasypt-demo -p 8877:8877 zbbmeta/spring-boot-jasypt-demo:1.0-SNAPSHOT
2、IDED中运行Docker 我们之前安装了Docker插件,那么IDEA中就多了一个Docker
选项
![一键部署Spring Boot到远程Docker容器 图片[8]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-35.png)
点击Docker下面的images,就可以显示,,服务器上存在的所有 Docker 镜像,如下:
![一键部署Spring Boot到远程Docker容器 图片[9]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-36.png)
选中我们要运行的镜像,右键单击,选中Create Container就可以创建出一个容器,如下图:
![一键部署Spring Boot到远程Docker容器 图片[10]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-37.png)
编写容器名称和绑定端口
![一键部署Spring Boot到远程Docker容器 图片[11]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-38.png)
![一键部署Spring Boot到远程Docker容器 图片[12]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-39.png)
![一键部署Spring Boot到远程Docker容器 图片[13]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-40.png)
- 点击run运行容器
![一键部署Spring Boot到远程Docker容器 图片[14]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-41.png)
- 显示结果
![一键部署Spring Boot到远程Docker容器 图片[15]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-42.png)
注意:有时候Create Container没有反应,我们需要取消Docker远程链接,然后重新链接
![一键部署Spring Boot到远程Docker容器 图片[16]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-43.png)
项目运行成功之后,在Postman输入远程服务器的地址http://192.168.150.102:8877/tutorial
,就可以访问了:
![一键部署Spring Boot到远程Docker容器 图片[17]-一键部署Spring Boot到远程Docker容器-不念博客](https://www.bunian.cn/wp-content/uploads/2024/01/image-44.png)