利⽤Kubernetes(K8S)部署JAVA项⽬
⼀、jar包和war包区别
⾸先简单介绍⼀下jar包和war包区别,当时就没分清,导致部署总是傻傻分不清楚.
jar包:jar包就是java的类进⾏编译⽣成的class⽂件就⾏打包的压缩包。⾥⾯是⼀些class⽂件。当我们⾃⼰使⽤maven写⼀些java程序,进⾏打包⽣成jar包。同时在可以在其他的⼯程下使⽤,但是我们在这个⼯程依赖的jar包,在其他⼯程使⽤该jar包也要导⼊。
war包:其实就是⼀个web程序进⾏打包便于部署的压缩包,⾥⾯包含我们web程序需要的⼀些东西,其中包括l的配置⽂件,前端的页⾯⽂件,以及依赖的jar。⽂件数量对于jar包,这样便于我们部署⼯程,直接放到tomcat的webapps⽬录下,直接启动tomcat即可。同时可以使⽤WinRAR查看war包,直接将后缀.war改成.rar
⼆、创建JAVA项⽬,并打包成jar包
我的⽬录结构
这⾥是利⽤SpringBoot写的⼀个⼩DEMO,不熟悉的,可以去看⼊门视频
三、创建Dockerfile⽂件
我看了这篇⽂章作为参考,但COPY时候,他的有target/⽬录,我不明⽩哪⼉来的,折腾了半天
Dockerfile⽂件
#基础镜像,如果本地仓库没有,会从远程仓库拉取
FROM openjdk:8-jdk-alpine
#容器中创建⽬录
RUN mkdir -p /usr/local/pasq
#编译后的jar包copy到容器中创建到⽬录内
COPY target/demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar
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
#编译后的jar包copy到容器中创建到⽬录内
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是我的仓库地址
登录仓库:docker login hub.lqz
标记镜像:docker tag myapp:1.0 hub.lqz/library/myapp:1.0
推送镜像:docker push hub.lqz/library/myapp:1.0
获取镜像:docker pull hub.lqz/library/myapp:1.0
仓库命令
五、Deployment,Service的yaml⽂件
1、Deployment.yaml
deployment为申明式,所以构建⽤apply
⼀般将Deployment,Service写在⼀起,但我太菜,初步选择了分开写(其中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/library/nginx:latest
imagePullPolicy: IfNotPresent
小白学java有前途吗
ports:
- name: http
containerPort: 80
创建: kubectl apply -f svc-deployment.yaml
2、service.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冲鸭

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。