打包docker鏡像推送到遠程服務(wù)器并部署到k8s的方法步驟
前提條件:
1、docker服務(wù)器已開啟遠程訪問,參考《遠程docker服務(wù)器攜帶證書連接》。
2、服務(wù)器上已經(jīng)搭建好k8s集群,本文是k8s單點集群用于測試。
在之前的文章中我們已經(jīng)通過idea的docker插件測試了遠程docker服務(wù)器已經(jīng)能夠正常訪問,雖然利用這個docker插件也可以完成docker鏡像的打包及推送,但本文我們將換一種方式,使用maven的docker-maven-plugin插件完成docker鏡像的打包,以及推送到遠程docker服務(wù)器。
1、Dockerfile
Dockerfile文件用于將我們的應(yīng)用做成docker鏡像
# 指定jdk環(huán)境版本,基于java8創(chuàng)建鏡像 FROM java:8 # 掛載臨時目錄 VOLUME /tmp # 添加指定jar包到容器《此處為項目打包產(chǎn)生的jar包全名》 ADD practice-job-0.0.1-SNAPSHOT.jar /practice-job.jar # 容器向外暴露的端口號《指該項目運行所占用的的端口號》 EXPOSE 8081 # 容器啟動后執(zhí)行的命令 ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/practice-job.jar" ]
2、pom配置
pom文件的相關(guān)配置如下,注意填入遠程服務(wù)器的ip,并指明上述Dockerfile路徑以及訪問遠程docker需要的pem證書文件的路徑。
<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> <!--將插件綁定在某個phase執(zhí)行 --> <executions> <execution> <id>build-image</id> <!--將插件綁定在package這個phase上。也就是說,用戶只需執(zhí)行mvn package ,就會自動執(zhí)行mvn docker:build --> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <forceTags>true</forceTags> <!--指定生成的鏡像名 該處修改為自己想要生成的鏡像名稱--> <imageName>practice-job</imageName> <!--指定標簽--> <imageTags> <imageTag>latest</imageTag> </imageTags> <!-- 指定Dockerfile 路徑 --> <dockerDirectory>${project.basedir}</dockerDirectory> <!--指定遠程docker地址 --> <dockerHost>https://公網(wǎng)ip:2376</dockerHost> <!--指定pem證書文件路徑地址 --> <dockerCertPath>${project.basedir}/src/main/resources/pem</dockerCertPath> <!-- 這里是復(fù)制jar包到docker容器指定目錄配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar 包所在的路徑此處配置的即對應(yīng) target 目錄 --> <directory>${project.build.directory}</directory> <!-- 需要包含的jar包,這里對應(yīng)的是Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build>
3、鏡像推送
上述準備就緒以后執(zhí)行install命令,等待一段時間后下方控制臺出現(xiàn)BUILD SUCCESS則說明鏡像推送成功。
接著去遠程服務(wù)器驗證一下,輸入docker images命令查看容器鏡像。
可以看到我們的應(yīng)用鏡像已經(jīng)推送成功了,下面就是部署階段。
4、k8s部署
如果在以前我們的部署環(huán)境只有docker容器,那么這里只需要docker run我們的應(yīng)用鏡像,將項目部署在docker容器就可以訪問了。但現(xiàn)在我們的部署環(huán)境是k8s+docker,所以不能直接運行我們的應(yīng)用鏡像進行部署,下面進入k8s的部署。
首先需要創(chuàng)建兩個yaml文件:practice-job-deployment.yaml、practice-job-service.yaml,至于這兩個文件的作用涉及到k8s的概念,關(guān)于k8s的概念將會在之后的文章中談到,這里只需要知道在k8s中的大部分配置都是基于yaml文件進行定義的就可以了。
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 #鏡像名稱+版本 imagePullPolicy: Never #表示鏡像來源,IfNotPresent本地沒有就從hub倉庫拉取,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(對內(nèi))的端口 targetPort: 8081 #pod的端口 nodePort: 32001 #service(對外)的端口
然后分別執(zhí)行命令:
kubectl apply -f practice-job-deployment.yaml kubectl apply -f practice-job-service.yaml
執(zhí)行命令:kubectl get pod --all-namespaces 查看pod,可以看到我們項目的pod已經(jīng)成功運行。
執(zhí)行命令:kubectl logs practice-job-deployment-77d685767-glvgm -n practice 查看應(yīng)用運行日志。格式為:kubectl logs <pod的name> -n <pod的namespace>。
執(zhí)行命令:docker ps 可以看到項目也已經(jīng)運行在容器中了
執(zhí)行命令:kubectl get service --all-namespaces 可以看到應(yīng)用對應(yīng)的服務(wù)也已啟動成功且對外暴露的端口正是32001,這個端口就是我們前面在yaml文件中自己配置的。
最后瀏覽器訪問:公網(wǎng)ip:32001/doc.html。此路徑只是針對我的項目,不同的項目路徑不同。注意防火墻需要開啟相應(yīng)端口。
至此應(yīng)用從本地打包docker鏡像推送至服務(wù)器,并部署到k8s+docker容器結(jié)束。
到此這篇關(guān)于打包docker鏡像推送到遠程服務(wù)器并部署到k8s的方法步驟的文章就介紹到這了,更多相關(guān)docker鏡像打包并部署到k8s內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決docker?pull出現(xiàn)錯誤:Error?response?from?daemon
這篇文章主要給大家介紹了關(guān)于解決docker?pull出現(xiàn)錯誤:Error?response?from?daemon的相關(guān)資料,這個錯誤提示一般是因為你沒有權(quán)限拉取對應(yīng)的鏡像,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下2023-12-12詳解docker國內(nèi)鏡像拉取和鏡像加速registry-mirrors配置修改
由于國內(nèi)訪問直接訪問Docker hub網(wǎng)速比較慢,拉取鏡像的時間就會比較長。一般我們會使用鏡像加速或者直接從國內(nèi)的一些平臺鏡像倉庫上拉取2017-05-05docker registry 鏡像同步的實現(xiàn)思路
這篇文章主要介紹了docker registry 鏡像同步的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Docker、Podman 和 Containerd 三者區(qū)別解析
Docker、Podman 和 Containerd 是三種流行的容器工具,它們都用于容器的創(chuàng)建、管理和運行,但它們在設(shè)計理念、功能和使用場景上有一些差異,這篇文章主要介紹了Docker、Podman 和 Containerd 三者區(qū)別,需要的朋友可以參考下2025-02-02使用Docker部署 spring-boot maven應(yīng)用的方法
本篇文章主要介紹了使用Docker部署 spring-boot maven應(yīng)用的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08總結(jié)Docker不適合部署數(shù)據(jù)庫的7大原因
在本篇文章里小編給大家整理一篇關(guān)于Docker不適合部署數(shù)據(jù)庫的7大原因,有興趣的朋友們可以參考學習下。2021-01-01