1、開發環境
1.1 操作系統win10, 開啓虛擬化
1.2 eclipse, jdk1.8,maven 3
1.3 docker, kubernetes、kubectl
2、創建spring boot工程
該工程提供一個hello world服務,訪問http://localhost:8080/hello,瀏覽器顯示hello world
3、創建Dockerfile
/example.spring.docker/src/main/docker/Dockerfile的內容如下:
FROM java:8
MAINTAINER [email protected]
RUN groupadd appuser
RUN useradd -g appuser apprun
ADD example.spring.docker*.jar /opt/app.jar
ADD entrypoint.sh /opt/entrypoint.sh
RUN chown -R apprun:appuser /opt
RUN chmod a+x /opt/entrypoint.sh
USER apprun
WORKDIR /opt/
RUN mkdir /opt/applog
VOLUME /tmp
ENV JAVA_OPTS=""
ENTRYPOINT [ "/bin/sh", "/opt/entrypoint.sh" ]
/example.spring.docker/src/main/docker/entrypoint.sh的內容如下:
#!/bin/bash
java $JAVA_OPTS -jar ./app.jar
4、修改pom.xml
添加docker-maven-plugin插件,可以使用maven命令生產docker image
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags>
<imageTag>${app.version}</imageTag>
</imageTags>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
5、打包應用鏡像
mvn clean package docker:build
6、編寫k8s配置文件
k8s-springboot-test.yaml
apiVersion: v1
kind: Service
metadata:
name: k8s-springboot-demo
namespace: default
labels:
app: k8s-springboot-demo
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30090
selector:
app: k8s-springboot-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-springboot-demo
labels:
app: k8s-springboot-demo
spec:
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: k8s-springboot-demo
template:
metadata:
labels:
app: k8s-springboot-demo
spec:
containers:
- name: k8s-springboot-demo
image: lzw/example.spring.docker:latest
ports:
- containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 30
imagePullPolicy: IfNotPresent
7、創建部署
kubectl create -f k8s-springboot-test.yaml
kubectl delete -f k8s-springboot-test.yaml
8、進入k8s控制檯查看
可以看到起了3個容器
9、瀏覽器訪問容器服務