docker启动springboot

准备

  需要准备东西有:

  1. docker环境
  2. sprinboot项目

手动

部署

打包

  首先将springboot项目通过maven打包,得到可执行jar包。

1
2
3
4
5
# 删除编译文件
mvn clean

# 将项目打包,得到可执行jar包
mvn package

构建

  将得到的可执行jar包构建成docker镜像。

  将得到的jar包放入指定目录下,并且在同目录下建立Dockerfile文件(文件名不能错)。
  Dockerfile文件内容:

1
2
3
4
5
6
7
8
# 基础镜像,环境
FROM java:8
# springboot内嵌tomcat的工作目录
VOLUME /tmp
# 拷贝文件并重命名
ADD <包名称>.jar <镜像名称>.jar
# 启动时的命令
ENTRYPOINT ["java","-jar","<包名称>.jar"]

  执行docker构建命令,得到docker镜像。

1
docker build -t <镜像名称> .

验证

  构建完成后,就可以在镜像列表查看是否有新构建的镜像,也可以运行该镜像。

问题

jar包名称问题

  docker中镜像名称应该是使用小写字母,不可以使用大写字母,否则报错,命令行中不允许大写字母及特殊字符。

1
2
invalid argument "learn-0.0.1-SNAPSHOT" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
See 'docker build --help'.

执行路径问题

  执行构建镜像命令应该进入所创建的目录,即在Dockerfile文件所在目录。

1
failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount528762

自动

  借助docker提供的maven工具,可自动构建docker镜像。

部署

引入依赖

  首先需要引入docker的maven构建工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<!-- 低版本的会报错-->
<!-- 1.0.0不支持docker-desktop-->
<version>1.2.2</version>
<configuration>
<imageName>springboot/learn</imageName>
<!-- Dockerfile文件所在的文件位置,可以用配置替代 -->
<!-- <dockerDirectory>src/main/docker</dockerDirectory> -->
<!-- 基础镜像,运行一个springboot应用只需要基础的java环境就行 -->
<baseImage>java:8</baseImage>
<!-- docker启动的时候执行的命令 -->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

构建镜像

  添加完依赖就可以对项目打包,构建。

1
2
3
4
5
# 首先将项目打包
mvn package

# 使用添加的maven插件将项目构建成docker镜像
mvn docker:build

  构建完成就可以在docker镜像列表中查看。