利用Kubernetes(K8S)部署JAVA項目


一、jar包和war包區別

首先簡單介紹一下jar包和war包區別,當時就沒分清,導致部署總是傻傻分不清楚.

jar包:jar包就是java的類進行編譯生成的class文件就行打包的壓縮包。里面是一些class文件。當我們自己使用maven寫一些java程序,進行打包生成jar包。同時在可以在其他的工程下使用,但是我們在這個工程依賴的jar包,在其他工程使用該jar包也要導入。

war包:其實就是一個web程序進行打包便於部署的壓縮包,里面包含我們web程序需要的一些東西,其中包括web.xml的配置文件,前端的頁面文件,以及依賴的jar。文件數量對於jar包,這樣便於我們部署工程,直接放到tomcatwebapps目錄下,直接啟動tomcat即可。同時可以使用WinRAR查看war包,直接將后綴.war改成.rar

原文鏈接:https://blog.csdn.net/shu616048151/article/details/81136164

二、創建JAVA項目,並打包成jar

 

我的目錄結構

 

這里是利用SpringBoot寫的一個小DEMO,不熟悉的,可以去看入門視頻

鏈接:https://www.bilibili.com/video/av38657363/?p=6

三、創建Dockerfile文件

我看了這篇文章作為參考,但COPY時候,他的有target/目錄,我不明白哪兒來的,折騰了半天

文章鏈接:https://cloud.tencent.com/developer/article/1512705

Dockerfile文件

#基礎鏡像,如果本地倉庫沒有,會從遠程倉庫拉取

FROM openjdk:8-jdk-alpine

#容器中創建目錄

RUN mkdir -p /usr/local/pasq

#編譯后的jarcopy到容器中創建到目錄內

COPY target/demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar

#指定容器啟動時要執行的命令

ENTRYPOINT ["java","-jar","/usr/local/pasq/myapp.jar"]

 

#基礎鏡像,如果本地倉庫沒有,會從遠程倉庫拉取

FROM openjdk:8-jdk-alpine

#容器中創建目錄

RUN mkdir -p /usr/local/pasq

#編譯后的jarcopy到容器中創建到目錄內

COPY demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar

#指定容器啟動時要執行的命令

ENTRYPOINT ["java","-jar","/usr/local/pasq/myapp.jar"]

我所遇到的問題,開始對於jar包的位置沒有相對於dockerfile文件,導致一直不能創建成功

 

四、構建鏡像

1、構建命令

docker build -f Dockerfile文件位置 -t 鏡像名:版本 . 【末尾有個點,一點要注意】 docker build -f /myDir/Dockerfile3 -t myapp:1.0 .

Dockerfile一般位於構建上下文的根目錄下,

-f指定該文件的位置

-t參數指定構建成后,鏡像的倉庫、標簽等

利用docker images命令查看自己所構建的鏡像

2、鏡像推送push、獲取pull

鏡像推送,我是自己做了個harbor倉庫,hub.lqz.com是我的倉庫地址

視頻地址鏈接:https://www.bilibili.com/video/av66617940/?p=14

登錄倉庫:docker login hub.lqz.com

 

標記鏡像:docker tag myapp:1.0 hub.lqz.com/library/myapp:1.0

推送鏡像:docker push hub.lqz.com/library/myapp:1.0

 

獲取鏡像:docker pull hub.lqz.com/library/myapp:1.0

 

 

倉庫命令

 

 

 

五、DeploymentServiceyaml文件

1Deployment.yaml

deployment為申明式,所以構建用apply

一般將DeploymentService寫在一起,但我太菜,初步選擇了分開寫(其中service選擇了nodePort)

[root@master manifests]# vim svc-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: myapp-deploy

  namespace: default

spec:

  replicas: 3

  selector:

    matchLabels:

      app: myapp

      release: stabel

  template:

    metadata:

      labels:

        app: myapp

        release: stabel

        env: test

    spec:

      containers:

      - name: myapp

        image: hub.lqz.com/library/nginx:latest

        imagePullPolicy: IfNotPresent

        ports:

        - name: http

          containerPort: 80

創建: kubectl apply -f svc-deployment.yaml

2service.yaml

[root@master manifests]# vim svc-nodePort.yaml

apiVersion: v1

kind: Service

metadata:

  name: myapp

  namespace: default

spec:

  type: NodePort

  selector:

    app: myapp

    release: stabel

  ports:

  - name: http

    port: 8080

    targetPort: 8080

    nodePort: 30080

 

創建svc: kubectl apply -f svc-nodePort.yaml

問題:在構建過程中,svc-nodePort.yaml一直沒寫nodePort,導致創建成功,但一直訪問失敗,需要更加熟悉熟悉

 

查看pod,看是否構建成功

 

查看svc,並訪問nodePort

 

最后,訪問   ip地址:30080(根據自身設置的為准)

 

訪問成功,但沒頁面,根據我的jar包,加/hello,訪問成功

 

六、總結

   看起來就一點的篇幅,本以為很快就能搞定的東西,寫出來也花了我近一個小時,果然,什么事都不能想當然啊。這只是一個很基礎的練習,沒有添加太多的東西,但我卻在其中周周轉轉了一兩周之久,網上也沒有找到適合我自己這種超級小白的資料,每一個現在看起來超級白痴的問題,在當時卻足以讓我寸步難行。自學這種事,可真TMD讓人眼瞎,理不清主干思想,抓不住重點,把握不住節奏,做的也不夠完善。但無論怎么樣,那怕自己是一只胖菜鳥,今天也終於揮動了一下翅膀,不值得驕傲,卻值得留念!

       望每一個在學習道路上踽踽獨行的人都能守得雲開見月明!

  2019-10-18打卡,今天也是FPX 小鳳凰S9小組第一出現的日子,小IG,RNG沖鴨!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM