前提條件:
1、docker服務器已開啟遠程訪問,參考《遠程docker服務器攜帶證書連接》,
2、服務器上已經搭建好k8s集群,本文是k8s單點集群用于測驗,
在之前的文章中我們已經通過idea的docker插件測驗了遠程docker服務器已經能夠正常訪問,雖然利用這個docker插件也可以完成docker鏡像的打包及推送,但本文我們將換一種方式,使用maven的docker-maven-plugin插件完成docker鏡像的打包,以及推送到遠程docker服務器,
1、Dockerfile
Dockerfile檔案用于將我們的應用做成docker鏡像
# 指定jdk環境版本,基于java8創建鏡像
FROM java:8
# 掛載臨時目錄
VOLUME /tmp
# 添加指定jar包到容器《此處為專案打包產生的jar包全名》
ADD practice-job-0.0.1-SNAPSHOT.jar /practice-job.jar
# 容器向外暴露的埠號《指該專案運行所占用的的埠號》
EXPOSE 8081
# 容器啟動后執行的命令
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/practice-job.jar" ]
2、pom配置
pom檔案的相關配置如下,注意填入遠程服務器的ip,并指明上述Dockerfile路徑以及訪問遠程docker需要的pem證書檔案的路徑,
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--使用docker-maven-plugin插件,用于將該服務打包成鏡像發往docker服務端-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--將插件系結在某個phase執行 -->
<executions>
<execution>
<id>build-image</id>
<!--將插件系結在package這個phase上,也就是說,用戶只需執行mvn package ,就會自動執行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://公網ip:2376</dockerHost>
<!--指定pem證書檔案路徑地址 -->
<dockerCertPath>${project.basedir}/src/main/resources/pem</dockerCertPath>
<!-- 這里是復制jar包到docker容器指定目錄配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路徑此處配置的即對應 target 目錄 -->
<directory>${project.build.directory}</directory>
<!-- 需要包含的jar包,這里對應的是Dockerfile中添加的檔案名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
3、鏡像推送
上述準備就緒以后執行install命令,等待一段時間后下方控制臺出現BUILD SUCCESS則說明鏡像推送成功,
![]() | ![]() |
接著去遠程服務器驗證一下,輸入docker images命令查看容器鏡像,

可以看到我們的應用鏡像已經推送成功了,下面就是部署階段,
4、k8s部署
如果在以前我們的部署環境只有docker容器,那么這里只需要docker run我們的應用鏡像,將專案部署在docker容器就可以訪問了,但現在我們的部署環境是k8s+docker,所以不能直接運行我們的應用鏡像進行部署,下面進入k8s的部署,
首先需要創建兩個yaml檔案:practice-job-deployment.yaml、practice-job-service.yaml,至于這兩個檔案的作用涉及到k8s的概念,關于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(對內)的埠
targetPort: 8081 #pod的埠
nodePort: 32001 #service(對外)的埠
然后分別執行命令:
kubectl apply -f practice-job-deployment.yaml
kubectl apply -f practice-job-service.yaml

執行命令:kubectl get pod --all-namespaces 查看pod,可以看到我們專案的pod已經成功運行,

執行命令:kubectl logs practice-job-deployment-77d685767-glvgm -n practice 查看應用運行日志,格式為:kubectl logs <pod的name> -n <pod的namespace>,

執行命令:docker ps 可以看到專案也已經運行在容器中了

執行命令:kubectl get service --all-namespaces 可以看到應用對應的服務也已啟動成功且對外暴露的埠正是32001,這個埠就是我們前面在yaml檔案中自己配置的,

最后瀏覽器訪問:公網ip:32001/doc.html,此路徑只是針對我的專案,不同的專案路徑不同,注意防火墻需要開啟相應埠,

至此應用從本地打包docker鏡像推送至服務器,并部署到k8s+docker容器結束,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/345611.html
標籤:其他
上一篇:2.服務器部署web服務器


