打包docker鏡像推送到遠(yuǎn)程服務(wù)器并部署到k8s的方法步驟
前提條件:
1、docker服務(wù)器已開(kāi)啟遠(yuǎn)程訪問(wèn),參考《遠(yuǎn)程docker服務(wù)器攜帶證書(shū)連接》。
2、服務(wù)器上已經(jīng)搭建好k8s集群,本文是k8s單點(diǎn)集群用于測(cè)試。
在之前的文章中我們已經(jīng)通過(guò)idea的docker插件測(cè)試了遠(yuǎn)程docker服務(wù)器已經(jīng)能夠正常訪問(wèn),雖然利用這個(gè)docker插件也可以完成docker鏡像的打包及推送,但本文我們將換一種方式,使用maven的docker-maven-plugin插件完成docker鏡像的打包,以及推送到遠(yuǎn)程docker服務(wù)器。
1、Dockerfile
Dockerfile文件用于將我們的應(yīng)用做成docker鏡像
# 指定jdk環(huán)境版本,基于java8創(chuàng)建鏡像 FROM java:8 # 掛載臨時(shí)目錄 VOLUME /tmp # 添加指定jar包到容器《此處為項(xiàng)目打包產(chǎn)生的jar包全名》 ADD practice-job-0.0.1-SNAPSHOT.jar /practice-job.jar # 容器向外暴露的端口號(hào)《指該項(xiàng)目運(yùn)行所占用的的端口號(hào)》 EXPOSE 8081 # 容器啟動(dòng)后執(zhí)行的命令 ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/practice-job.jar" ]
2、pom配置
pom文件的相關(guān)配置如下,注意填入遠(yuǎn)程服務(wù)器的ip,并指明上述Dockerfile路徑以及訪問(wèn)遠(yuǎn)程docker需要的pem證書(shū)文件的路徑。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--使用docker-maven-plugin插件,用于將該服務(wù)打包成鏡像發(fā)往docker服務(wù)端-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--將插件綁定在某個(gè)phase執(zhí)行 -->
<executions>
<execution>
<id>build-image</id>
<!--將插件綁定在package這個(gè)phase上。也就是說(shuō),用戶(hù)只需執(zhí)行mvn package ,就會(huì)自動(dòng)執(zhí)行mvn docker:build -->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<forceTags>true</forceTags>
<!--指定生成的鏡像名 該處修改為自己想要生成的鏡像名稱(chēng)-->
<imageName>practice-job</imageName>
<!--指定標(biāo)簽-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定Dockerfile 路徑 -->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!--指定遠(yuǎn)程docker地址 -->
<dockerHost>https://公網(wǎng)ip:2376</dockerHost>
<!--指定pem證書(shū)文件路徑地址 -->
<dockerCertPath>${project.basedir}/src/main/resources/pem</dockerCertPath>
<!-- 這里是復(fù)制jar包到docker容器指定目錄配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路徑此處配置的即對(duì)應(yīng) target 目錄 -->
<directory>${project.build.directory}</directory>
<!-- 需要包含的jar包,這里對(duì)應(yīng)的是Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
3、鏡像推送
上述準(zhǔn)備就緒以后執(zhí)行install命令,等待一段時(shí)間后下方控制臺(tái)出現(xiàn)BUILD SUCCESS則說(shuō)明鏡像推送成功。


接著去遠(yuǎn)程服務(wù)器驗(yàn)證一下,輸入docker images命令查看容器鏡像。

可以看到我們的應(yīng)用鏡像已經(jīng)推送成功了,下面就是部署階段。
4、k8s部署
如果在以前我們的部署環(huán)境只有docker容器,那么這里只需要docker run我們的應(yīng)用鏡像,將項(xiàng)目部署在docker容器就可以訪問(wèn)了。但現(xiàn)在我們的部署環(huán)境是k8s+docker,所以不能直接運(yùn)行我們的應(yīng)用鏡像進(jìn)行部署,下面進(jìn)入k8s的部署。
首先需要?jiǎng)?chuàng)建兩個(gè)yaml文件:practice-job-deployment.yaml、practice-job-service.yaml,至于這兩個(gè)文件的作用涉及到k8s的概念,關(guān)于k8s的概念將會(huì)在之后的文章中談到,這里只需要知道在k8s中的大部分配置都是基于yaml文件進(jìn)行定義的就可以了。
vi practice-job-deployment.yaml
apiVersion: v1
kind: Namespace
metadata:
name: practice
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: practice-job-deployment
namespace: practice
spec:
replicas: 1
selector:
matchLabels:
app: practice-job-pod
template:
metadata:
labels:
app: practice-job-pod
spec:
hostNetwork: true
containers:
- name: practice-job-container
image: practice-job:latest #鏡像名稱(chēng)+版本
imagePullPolicy: Never #表示鏡像來(lái)源,IfNotPresent本地沒(méi)有就從hub倉(cāng)庫(kù)拉取,Never表示只從本地
ports:
- containerPort: 8081
env:
# 指定日志文件路徑
- name: logging.path
value: /var/logs
vi practice-job-service.yaml
apiVersion: v1
kind: Service
metadata:
name: practice-job-service
namespace: practice
labels:
app: practice-job-service
spec:
type: NodePort
selector:
app: practice-job-pod
ports:
- name: http
protocol: TCP
port: 8081 #service(對(duì)內(nèi))的端口
targetPort: 8081 #pod的端口
nodePort: 32001 #service(對(duì)外)的端口
然后分別執(zhí)行命令:
kubectl apply -f practice-job-deployment.yaml kubectl apply -f practice-job-service.yaml

執(zhí)行命令:kubectl get pod --all-namespaces 查看pod,可以看到我們項(xiàng)目的pod已經(jīng)成功運(yùn)行。

執(zhí)行命令:kubectl logs practice-job-deployment-77d685767-glvgm -n practice 查看應(yīng)用運(yùn)行日志。格式為:kubectl logs <pod的name> -n <pod的namespace>。

執(zhí)行命令:docker ps 可以看到項(xiàng)目也已經(jīng)運(yùn)行在容器中了

執(zhí)行命令:kubectl get service --all-namespaces 可以看到應(yīng)用對(duì)應(yīng)的服務(wù)也已啟動(dòng)成功且對(duì)外暴露的端口正是32001,這個(gè)端口就是我們前面在yaml文件中自己配置的。

最后瀏覽器訪問(wèn):公網(wǎng)ip:32001/doc.html。此路徑只是針對(duì)我的項(xiàng)目,不同的項(xiàng)目路徑不同。注意防火墻需要開(kāi)啟相應(yīng)端口。

至此應(yīng)用從本地打包docker鏡像推送至服務(wù)器,并部署到k8s+docker容器結(jié)束。
到此這篇關(guān)于打包docker鏡像推送到遠(yuǎn)程服務(wù)器并部署到k8s的方法步驟的文章就介紹到這了,更多相關(guān)docker鏡像打包并部署到k8s內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker移除鏡像幾種不同的方法實(shí)戰(zhàn)記錄
在Docker實(shí)戰(zhàn)中,合理刪除不再需要的鏡像,有助于釋放寶貴的磁盤(pán)空間,刪除Docker鏡像可以通過(guò)多種方式,包括刪除單個(gè)鏡像、強(qiáng)制刪除正在使用的鏡像、刪除未被任何容器引用的所有鏡像以及刪除所有鏡像等,需要的朋友可以參考下2024-11-11
使用docker創(chuàng)建靜態(tài)網(wǎng)站應(yīng)用(多種方式)
這篇文章主要介紹了使用docker創(chuàng)建靜態(tài)網(wǎng)站應(yīng)用(多種方式),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
詳解如何優(yōu)雅的給Docker配置網(wǎng)絡(luò)代理
有時(shí)因?yàn)榫W(wǎng)絡(luò)原因,比如公司 NAT,或其它啥的,需要使用代理,這篇文章主要為大家詳細(xì)介紹了如何優(yōu)雅的給Docker配置網(wǎng)絡(luò)代理,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
最新IDEA快速實(shí)現(xiàn)Docker鏡像部署運(yùn)行的過(guò)程詳解
這篇文章主要介紹了最新IDEA快速實(shí)現(xiàn)Docker鏡像部署運(yùn)行的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
supervisor下的Dockerfile的多服務(wù)鏡像封裝操作
這篇文章主要介紹了supervisor下的Dockerfile的多服務(wù)鏡像封裝操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
skywalking容器化部署docker鏡像構(gòu)建k8s從測(cè)試到可用
這篇文章主要為大家介紹了skywalking容器化部署docker鏡像構(gòu)建k8s從測(cè)試到可用的構(gòu)建部署過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
docker<容器數(shù)據(jù)卷-v>對(duì)容器內(nèi)數(shù)據(jù)持久化詳解(備份)
容器的數(shù)據(jù)持久化主要是指宿主機(jī)與容器,以及容器與容器之間進(jìn)行數(shù)據(jù)交互,下面這篇文章主要給大家介紹了關(guān)于docker<容器數(shù)據(jù)卷-v>對(duì)容器內(nèi)數(shù)據(jù)持久化的相關(guān)資料,需要的朋友可以參考下2023-03-03

