利用Kubernetes(K8S)配合Docker部署jar包(JAVA项目)

本文详细介绍如何将Java Spring Boot项目打包为jar,并利用Docker和Kubernetes进行部署的步骤。包括创建Dockerfile、构建Docker镜像、推送镜像至仓库及K8S上的查询、重启和更新操作。

前言

最近有个JAVA的后台项目需要部署在K8S上,简单记录一下配合Docker打jar包的部署流程,方便以后翻阅。

一、浅显介绍一下war包和jar包的区别

1.1. war包:

其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。文件数量对于jar包,这样便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。同时可以使用WinRAR查看war包,直接将后缀.war改成.rar;

1.2. jar包:

jar包就是java的类进行编译生成的class文件就行打包的压缩包。里面是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。

二、JAVA项目打成jar包

2.1 SpringBoot打包,生成一个jar包
(springcloud-help-center-provider-0.0.1-SNAPSHOT.jar)

三、K8S上创建Dockerfile文件

3.1 Dockerfile文件位置如下:

3.2.1 将Dockerfile文件使用 EditPlus打开

3.2.2 在服务器上打开

输入命令:[root@damiapp113 help]# vi Dockerfile

3.3 内容介绍

# 拉取jdk8作为基础镜像
FROM java:8
# log输出位置
VOLUME  /usr/platform/log
# 添加jar到镜像并命名为test_k8s_provider_0001.jar
ADD  springcloud-help-center-provider-0.0.1-SNAPSHOT.jar   test_k8s_provider_0001.jar
#运行参数设定(此处也可以不用设定)
RUN  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN  echo 'Asia/Shanghai' >/etc/timezone
RUN  bash -c 'touch /test_k8s_provider_0001.jar'
# 镜像启动后暴露的端口
EXPOSE 8134
# jar运行命令,参数使用逗号隔开
ENTRYPOINT ["java","-jar","test_k8s_provider_0001.jar"]

 四、构建Docker镜像

4.1 构建命令

#【末尾有个点,一点要注意】最后的.表示Dockerfile在当前目录
docker build -t 镜像名:版本 . 
#示例如下(-t参数指定构建成后,镜像的仓库、标签等)
docker build -t test_k8s_provider_0001.jar:1.0.1 .

镜像构建成功,出现如下(

Successfully built 0d81cf52dba2
Successfully tagged test_k8s_provider_0001.jar:1.0.0):

使用docker images命令查看自己所构建的镜像

[root@damiapp113 test]# docker images

4.2 镜像推送push

 [root@testapp113 test]# docker push test_k8s_provider_0001.jar:1.0.0

推送成功之后就可以就可以使用了。

五、附录部分K8S查询/重启/更新命令

5.1 查看K8S上运行的所有pod

命令:[root@damiapp113 ~]# kubectl -n dami get pods

获取SVC信息:

命令:[root@damiapp113 ~]# kubectl -n dami get svc

5.2 查看pod详细信息

命令:[root@damiapp113 ~]# kubectl -n dami describe pod platform-help-96f5ffc9-q8fpd

5.3 查看pod日志

命令:[root@damiapp113 ~]# kubectl -n dami logs platform-help-96f5ffc9-q8fpd

 

5.4  查看部署的 deployment

命令:[root@damiapp113 ~]# kubectl -n dami get deployment

5.5 查看deployment内运行容器的名

命令:

[root@damiapp113 ~]# kubectl –n dami describe  deployment platform-help

 5.6 重启pod

当pod出现异常时可以执行delete命令删除pod,系统会自动生成一个新的pod

命令:[root@damiapp113 ~]# kubectl –n dami delete pod platform-help-96f5ffc9-q8fpd

 强制关闭pod

命令:

[root@damiapp113 ~]# kubectl delete pod platform-help-96f5ffc9-q8fpd -n dami --force --grace-period=0

5.7 镜像版本更新

当执行以下命令会删除现有的pod,然后使用新的镜像生成一个新的pod

命令:

[root@damiapp113 ~]# kubectl –n dami set image deployment deployment-name  container-name=image-name:tag

六、总结

我这里只是K8S上遇到的一点点小内容,有问题大家一起提出,我们共同学习、共同成长!!!

感谢大佬!!!
地址

### 使用 KubernetesDocker 部署 Java 项目的教程 #### 准备工作 在开始之前,需要确保已经安装了必要的工具和环境。这括 JDK、Maven 或 Gradle 构建工具、Docker 客户端以及 kubectl 命令行工具[^1]。 #### 创建 Java 项目 假设我们有一个简单的 Spring Boot 应用程序作为目标项目。可以通过以下命令创建一个新的 Spring Boot 项目: ```bash spring init --dependencies=web my-java-app cd my-java-app ``` 此操作将生成一个基础的 Web 项目结构,并含 `pom.xml` 文件用于 Maven 构建管理。 #### 添加 Docker 支持 为了使应用程序能够被封装为 Docker 映像,在构建过程中需引入插件支持。编辑 `pom.xml` 并加入如下配置片段来启用 Docker 插件功能: ```xml <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <executions> <execution> <id>default</id> <goals> <goal>build</goal> <goal>push</goal> </goals> </execution> </executions> <configuration> <repository>${project.artifactId}</repository> <tag>${project.version}</tag> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build> ``` 上述 XML 片段定义了一个名为 `dockerfile-maven-plugin` 的插件实例化过程及其参数设置,它会在执行特定生命周期阶段时自动完成映像制作与推送动作。 #### 编写 Dockerfile 在同一目录下新建文件名叫做 `Dockerfile` 的纯文本文档,其内容大致如下所示: ```dockerfile FROM openjdk:17-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] ``` 这段脚本描述了一种基于官方 OpenJDK 镜像的基础层之上叠加当前应用二进制产物的方式形成最终可分发版本的方法论。 #### 测试本地镜像构建流程 通过运行下面这条指令验证整个自动化链条是否正常运作: ```bash mvn clean package dockerfile:build ``` 如果一切顺利的话,则应该能看到类似于这样的日志输出表明成功建立了新的容器镜像资源: ``` [INFO] Building image my-java-app:0.0.1-SNAPSHOT ... Successfully built abcdefghijklmnopqrstuvwxyz ``` #### 推送至远程仓库 继续利用 maven 生命周期进一步把刚造好的成果物提交给指定位置存储起来以便稍后引用加载之用: ```bash mvn dockerfile:push ``` 此时依据实际网络状况等待片刻之后即可确认上传完毕状态消息显示出来. #### 设定 K8S 资源清单 最后一步就是编写适合集群调度使用的 YAML 格式的资源配置说明书样例形式可能看起来像是这样子的样子: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-java-deployment spec: replicas: 2 selector: matchLabels: app: my-java-app template: metadata: labels: app: my-java-app spec: containers: - name: my-java-container image: your-dockerhub-account/my-java-app:latest ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: my-java-service spec: type: LoadBalancer selector: app: my-java-app ports: - protocol: TCP port: 80 targetPort: 8080 ``` 这里分别声明了一个副本数设定为两个节点规模的应用部署计划还有对外暴露服务地址端口转换关系等内容细节部分[^2]. #### 提交到云端平台 登录腾讯云控制台界面找到对应区域下的 K8S 实例选项卡页面点击导入现有 manifest 文档按钮上传刚才准备妥当后的 yaml 文件即刻生效启动全部环节运转机制直至完全就绪为止. ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值