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、浏览器访问容器服务