一、部署流程
二、构建镜像
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"<hoaven@163.com>
ADD demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD java -jar app.jar
5、war包的Dockerfile
FROM tomcat:8
MAINTAINER "hoaven"<hoaven@163.com>
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接口: