在当今软件开发领域,应用程序的容器化部署已经成为一种流行的选择,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.service
- 添加以下内容
-H tcp://0.0.0.0:2375
- 配置完成,重启docker
systemctl daemon-reloadservice docker restart
Docker重启之后,Docker准备事情就完成了。
2. IDEA 准备
- 在IDEA中安装Docker插件
File->Settings->Plugins
安装好Docker插件后,IDEA 重启
- IDEA 配置Docker 远程连接
File->Settings->Build,Execution,Deployment->Docker 然后配置一下 Docker 的远程连接地址:
tcp://192.168.150.102:2375
配置完成后,会显示 Connection successful 表示链接Docker成功
3.项目准备
3.1. 创建Dockerfile
在项目根目录下创建
Dockerfile
,这是构建Docker镜像的文件,位置如下
Dockerfile内容如下:
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>
- execution节点: 配置当执行 mvn package 的时候,顺便也执行一下 docker:build
- configuration节点: 配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。
- resource节点: 配置一下 jar 的位置和名称即可。
5. 打包镜像
对项目使用package进行打包,镜像就可以上传到Docker服务器
打包第一次可能时间稍微久一点,因为Docker需要下载基础镜像openjdk:11.0.12
打包日志如下:
打包完成后,Docker服务器上就存在了项目镜像
6. 镜像运行
运行DOcker镜像方式存在两种方式
1、直接使用Docker命令在服务器上运行
docker run -d --name jasypt-demo -p 8877:8877 zbbmeta/spring-boot-jasypt-demo:1.0-SNAPSHOT
2、IDED中运行Docker 我们之前安装了Docker插件,那么IDEA中就多了一个Docker
选项
点击Docker下面的images,就可以显示,,服务器上存在的所有 Docker 镜像,如下:
选中我们要运行的镜像,右键单击,选中Create Container就可以创建出一个容器,如下图:
编写容器名称和绑定端口
- 点击run运行容器
- 显示结果
注意:有时候Create Container没有反应,我们需要取消Docker远程链接,然后重新链接
项目运行成功之后,在Postman输入远程服务器的地址http://192.168.150.102:8877/tutorial
,就可以访问了: