【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解

文章目录

  • 前言
  • 一、生成 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 | 中级篇】 Docker 中部署 Spring Boot 微服务详解_第1张图片

执行如下命令

docker build -t springboot_docker .

说明:docker build -t 镜像名称:标签 Dockerfile的相对位置,点号为寻址路径代表当前目录,不写tag默认是latest。

生成docker镜像如下:

【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解_第2张图片

二、启动容器

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,重新编译打包,成功启动

【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解_第3张图片

2.测试

浏览器输入http://ip:8083/demo-api/hello/world

【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解_第4张图片

三、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 .

【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解_第5张图片

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服务,以上方法亲测有效,希望能给大家一个参考。

⭕关注博主,不迷路 ⭕

创作不易,关注、点赞、收藏就是对作者最大的鼓励,欢迎在下方评论留言

你可能感兴趣的:(初识Docker,docker,spring,boot,微服务,云原生)