2025-03-18    2025-03-18    796 字  2 分钟

1.项目回顾

上篇文章中我们使用idea创建了springboot项目并且和mongo数据库整合。本篇将使用idea把springboot项目代码打包成jar包,使用容器将jar包构建成基础应用镜像并根据此镜像创建容器。

2.项目打包过程

打开上次的项目,右侧菜单选择maven,选择Execute Maven Goal按钮。

代码打包1-min.webp

双击mvn clean 清理下代码环境。

代码打包2-min.webp

然后重复之前操作,这次双击mvn package等待代码打包完成。

代码打包3-min.webp

打包完成后生成target目录,里面有刚才打包好的jar包。

代码打包4-min.webp

3.容器镜像构建过程

将“spring-boot2-0.0.1-SNAPSHOT.jar”包上传到容器服务器,服务器上创建目录。

目录结构如下:

1
2
3
4
5
6
7
root@VM-28-17-ubuntu:~# tree workdir/20240615/
workdir/20240615/
├── Dockerfile
└── target
    └── spring-boot2-0.0.1-SNAPSHOT.jar

1 directory, 2 files

通过Dockerfile生成镜像。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
FROM openjdk
VOLUME /tmp

ARG JAR_FILE=target/spring-boot2-0.0.1-SNAPSHOT.jar
ARG PORT=8080
ARG TIME_ZONE=Asia/Shanghai

ENV TZ=${TIME_ZONE}
ENV JAVA_OPTS="-Xms64m -Xmx256m"

COPY ${JAR_FILE} mytest.jar

EXPOSE ${PORT}

ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -server -jar mytest.jar
  • FROM:指明我们基于某个镜像来打包,因为需要启动Java应用,所以我们找了一个带JDK环境的镜像。这就非常灵活了,有非常多带Java环境的镜像,即使没有合适的,也可以自己做一个;

  • ARGDockerfile构建时的参数;

  • ENV:环境变量;

  • COPY:把文件复制到新的镜像内;

  • EXPOSE:暴露端口,这样外部才能访问;

  • ENTRYPOINT:启动命令。

准备好了Dockerfile后,就可以开始打包了:

1
2
$ mvn clean package
$ docker build -t test/springboot-mongo:0.0.1 .

等待构建完成后查看镜像

1
2
3
root@VM-28-17-ubuntu:~/workdir/20240615# docker image ls test/springboot-mongo 
REPOSITORY              TAG       IMAGE ID       CREATED       SIZE
test/springboot-mongo   0.0.1     a6112999bd0e   4 hours ago   497MB

使用该镜像创建一个应用

1
docker run -d --name test-springboot -p 8080:8080 test/springboot-mongo:0.0.1

根据容器启动日志看容器是否启动成功。

springboot-log-min.webp

说明Springboot应用已经正常启动,并成功连接MongoDB

Postman做一个简单的测试,成功插入一条数据。

post-body-min.webp

这是微软关于Docker微服务的开发流程图,大体就是应用代码——Dockerfile——生成镜像——容器编排服务——运行——测试——提交

devops-min.webp