1. 程式人生 > >Docker / Kubernetes部署Java / SpringBoot專案

Docker / Kubernetes部署Java / SpringBoot專案

一、部署流程

在這裡插入圖片描述

二、構建映象

1、建立應用

可以到 http://start.spring.io/ (或者藉助IDE)建立一個SpringBoot 的應用,在建立的時候,請選擇Web 依賴,以方便部署到 Kubernetes 之後可以檢視效果。

2、暴露測試介面

新建一個Rest介面:

@RestController public class HelloCtroller {
  @RequestMapping("/")
  public String home() {
  return "Hello Docker World";
  } 
}

3、新增Docker Image 依賴

dockerfile-maven-plugin 用於打包和上傳 Docker Image:

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>0.4.14</version>
 <configuration>
   <imageName>${project.groupId}.${project.artifactId}</imageName>
<dockerDirectory>${project.build.outputDirectory}</dockerDirectory> <dockerHost>http://127.0.0.1:2375</dockerHost> <resources> <resource> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</
include
>
</resource> </resources> </configuration> </plugin>

<imageName>${project.groupId}.${project.artifactId}</imageName>只指定了映象名稱,預設tag為latest,也可以<imageName>${project.groupId}.${project.artifactId}:${project.version}</imageName>指定tag。

4、jar包的Dockerfile

在resources目錄下建立Dockerfile檔案:

FROM java:8
MAINTAINER "hoaven"<[email protected]>
ADD demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD java -jar app.jar

5、war包的Dockerfile

FROM tomcat:8
MAINTAINER "hoaven"<[email protected]>
ADD demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/app.war
EXPOSE 8081
CMD ["catalina.sh", "run"]

6、上傳映象

mvn clean install docker:build

7、docker中執行專案

docker images 檢視映象
在這裡插入圖片描述

docker run 啟動執行映象

docker run -p 8080:8080 -t com.docker.demo:latest

啟動成功後可通過訪問http://localhost:8080檢視效果。

8、刪除容器

為了整合k8s,先把剛建立的container停止並刪除。

docker stop container_id
docker rm container_id

三、整合k8s

1、建立YAML檔案

apiVersion: apps/v1beta2  
kind: Deployment  
metadata:  
  name: demo-jar  
  labels:  
    app: demo-jar  
spec:  
  replicas: 1
  revisionHistoryLimit: 10
  selector:  
    matchLabels:  
      app: demo-jar 
  template:  
    metadata:  
      labels:  
        app: demo-jar  
    spec:  
      containers:  
      - name: demo-jar
        image: com.docker.demo:latest
        ports:  
        - containerPort: 8080
          protocol: TCP  
        livenessProbe:  
          httpGet:  
            path: /  
            port: 8080  
          initialDelaySeconds: 30  
          timeoutSeconds: 30  
        imagePullPolicy: IfNotPresent  
      # Comment the following tolerations if Dashboard must not be deployed on master  
      tolerations:  
      - key: node-role.kubernetes.io/master  
        effect: NoSchedule  
  
---  
apiVersion: v1  
kind: Service  
metadata:  
  name: demo-jar
  namespace: default
  labels:  
    app: demo-jar
spec:  
  ports:  
    - port: 8080  
      targetPort: 8080
  selector:  
    app: demo-jar 
  type: NodePort  

2、建立Deployment和Service

kubectl create -f example-demo.yaml

建立Deployment時會根據replicas引數值來自動建立對應數量的pod。

檢視Service:
在這裡插入圖片描述

檢視pod日誌:
在這裡插入圖片描述

驗證Rest介面:
在這裡插入圖片描述