文章目录
- 前言
- 一、生成 Docker 镜像
- 1.编写Dockerfile
- 2.构建镜像
- 二、启动容器
- 1.运行服务
- 2.测试
- 三、jar包映射部署
- 1.更新Dockerfile文件
- 2.构建镜像
- 3.创建&启动容器
- 总结
前言
本文将为您详细介绍如何在Docker容器中部署Spring Boot服务。
首先,您需要为您的Spring Boot应用程序创建一个Docker镜像。然后将镜像在Docker容器中运行起来即可
提示:以下是本篇文章正文内容,下面案例可供参考
一、生成 Docker 镜像
1.编写Dockerfile
FROM openjdk:8-oracle
MAINTAINER cat
# 在主机 /var/lib/docker目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp
# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD springboot-api-0.0.1-SNAPSHOT.jar /springboot_docker.jar
# 运行jar包
RUN bash -c 'touch /springboot_docker.jar'
ENTRYPOINT ["java", "-jar", "/springboot_docker.jar"]
# SpringBoot项目配置的端口号为8083,需要将8083暴露出去
EXPOSE 8083
这个Dockerfile文件使用alpine Linux操作系统和OpenJDK 8图像作为基础映像,将Spring Boot应用程序的JAR文件复制到springboot_docker.jar路径,然后使用ENTRYPOINT命令来启动应用程序。
2.构建镜像
将打包好的jar上传至服务器,与Dockerfile同一目录下
执行如下命令
docker build -t springboot_docker .
说明:docker build -t 镜像名称:标签
Dockerfile的相对位置,点号为寻址路径代表当前目录,不写tag默认是latest。
生成docker镜像如下:
二、启动容器
1.运行服务
执行命令docker run -d -p 8083:8083 --name myapp springboot_docker
,查看日志 docker logs -f -t --tail 行数 容器名
🚫出现报错:
Exception in thread "main" java.lang.UnsupportedClassVersionError:com/example/myweb/xxxApplication has been
compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime
only recognizes class file versions up to 52.0
✅解决方法:
- 编译版本和运行版本不一致,可能是编译版本高于运行版本导致的
- 为spring-boot-maven-plugin增加的版本号
看一下项目JDK为17,修改为JDK8,重新编译打包,成功启动
2.测试
浏览器输入http://ip:8083/demo-api/hello/world
三、jar包映射部署
根据上述步骤成功通过docker部署springboot服务,但是这样在启动容器后,每次需更新jar包时,都得重新制作镜像,再启动容器。流程及其繁琐,效率极低。
那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?
1.更新Dockerfile文件
FROM openjdk:8-jdk-alpine
MAINTAINER cat
RUN mkdir -p /demo/springboot/logs \
/demo/springboot/temp \
/demo/skywalking/agent
WORKDIR /demo/springboot
ENV SERVER_PORT=8083
EXPOSE ${SERVER_PORT}
ADD /springboot-api-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", \
"-Djava.security.egd=file:/dev/./urandom", \
"-Dserver.port=${SERVER_PORT}", \
# "-Dskywalking.agent.service_name=demo-springboot", \
# "-javaagent:/demo/skywalking/agent/skywalking-agent.jar", \
"-jar", "app.jar"]
2.构建镜像
docker build -t demo-springboot .
3.创建&启动容器
docker run --name demo-springboot -it -v /docker/java/demo/springboot-api-0.0.1-SNAPSHOT.jar:/demo/springboot/app.jar
-v /dlogs:/demo/springboot/logs -d -p 8083:8083 demo-springboot
-v 宿主机目录关联容器目录。这样宿主机的/docker/java/demo目录就与docker的/demo/springboot/目录进行映射。(这里还映射了日志目录)
这样的话,当jar包发生变动时,直接更新宿主机的/docker/java/demo/目录下的jar包即可,更新jar包之后需要将容器重启一下。
docker restart 容器id
总结
以上就是今天要讲的内容,本文仅仅简单介绍了如何在Docker容器中部署Spring Boot服务,以上方法亲测有效,希望能给大家一个参考。
⭕关注博主,不迷路 ⭕
创作不易,关注💖、点赞👍、收藏🎉就是对作者最大的鼓励👏,欢迎在下方评论留言🧐