一键部署 Spring Boot 项目到 Docker
容器化部署应该是目前的主流方案。
不同于传统的单体应用,微服务由于服务数量众多,在部署的时候出问题的可能性更大,这个时候,结合 Docker 来部署,就可以很好的解决这个问题,这也是目前使用较多的方案之一。
将 Spring Boot 项目打包到 Docker 容器中部署,有很多不同的方法,主要将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目。
安装 Docker
参考文章:https://blog.csdn.net/m0_59196543/article/details/124749175
配置 Docker 远程访问
Docker 安装成功之后,我们首先需要修改 Docker 配置,开启允许远程访问 Docker 的功能,开启方式很简单,修改 /usr/lib/systemd/system/docker.service 文件,修改如下内容:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
配置完成后,保存退出,然后重启 Docker:
1 | systemctl daemon-reload |
IDEA
- 安装 Docker 插件。
- 在 设置 -> 构建 -> Docker 中,配置一下 Docker 的远程连接地址。
配置完成后,可以看到下面有一个 Connection successful 提示,这个表示 Docker 已经连接上了。
简单项目测试
依赖项
1 | <dependency> |
配置 Dockerfile
- 在项目的根目录下,创建一个 Dockerfile ,作为镜像的构建文件
1
2
3
4
5
6
7
8
9
10
11# Spring Boot 项目的运行依赖 Java 环境,所以我自己的镜像基于 Java 镜像来构建。
FROM hub.c.163.com/library/java:latest
# 由于 Spring Boot 运行时需要 tmp 目录,这里数据卷配置一个 /tmp 目录出来
VOLUME /tmp
# 将本地 target 目录中打包好的 .jar 文件复制一份新的 到 /app.jar。
ADD target/docker-test-0.0.1-SNAPSHOT.jar app.jar
# 最后就是配置一下启动命令,由于打包的 jar 已经成为 app.jar 了,所以启动命令也是启动 app.jar。
ENTRYPOINT ["java","-jar","/app.jar"]
配置 Maven 插件
- 首先在 execution 节点中配置当执行 mvn package 的时候,顺便也执行一下 docker:build
- 然后在 configuration 中分别配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。
- 最后 resource 节点中再配置一下 jar 的位置和名称即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<dockerHost>http://localhost:2375</dockerHost>
<imageName>sihai/${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>
测试接口
1 |
|
项目打包
- 打包完成后,项目会自动构建成一个镜像,并且上传到 Docker 容器中。
- 打包完成后,就可以在 Docker 容器中看到刚刚打包成的镜像了。
项目运行
- 注意文件名不要写错
1 | docker run -d --name sihai -p 8080:8080 sihai/docker-test:0.0.1-SNAPSHOT |
启动成功之后,我们就可以访问容器中的接口了。