Docker / Kubernetes部署Java / SpringBoot專案
阿新 • • 發佈:2018-11-21
一、部署流程
二、構建映象
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介面: