一、jar包和war包區別
首先簡單介紹一下jar包和war包區別,當時就沒分清,導致部署總是傻傻分不清楚.
jar包:jar包就是java的類進行編譯生成的class文件就行打包的壓縮包。里面是一些class文件。當我們自己使用maven寫一些java程序,進行打包生成jar包。同時在可以在其他的工程下使用,但是我們在這個工程依賴的jar包,在其他工程使用該jar包也要導入。
war包:其實就是一個web程序進行打包便於部署的壓縮包,里面包含我們web程序需要的一些東西,其中包括web.xml的配置文件,前端的頁面文件,以及依賴的jar。文件數量對於jar包,這樣便於我們部署工程,直接放到tomcat的webapps目錄下,直接啟動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 #編譯后的jar包copy到容器中創建到目錄內 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.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
倉庫命令
五、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.com/library/nginx:latest imagePullPolicy: IfNotPresent 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沖鴨!!!