java项目现在在企业级用的很多,而spring又是用的最多之一的框架,这篇文章用来详细讲解容器化一个spring项目,终极的目的是为了让k8s做蓝绿发布
1.1.idea里面配置docker插件如下图:
这里的URL填写你docker宿主机的ip这个端口是在docker里面配置的centos7 在
/etc/systemd/system/docker.service 下修改如下:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
1.2 设置私有镜像仓库:
2.1.编码:
新建一个spring boot项目代码如下,这是段A版本的代码:
package com.example.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class demoncontrole {
@RequestMapping(value="/hello",method = RequestMethod.GET)
public String say(){
return "Hello this is blue release ";
}
}
2.2.打成jar包,并测试一下运行:
mvn clean install -Dmaven.test.skip=true
运行的命令,这个后面容器启动会用到
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=80
测试一下:
同样的方法部署一套B版的代码
2.3.打成docker镜像:
# Version 0.1
# Description: nacos dockerfile
# author: john chance
# https://github.com/zhuchance
# 基于centos7 ssh镜像
FROM sssllc/centos7.2-jdk1.8
# 复制jar包到容器里
COPY demo-0.0.1-SNAPSHOT.jar /opt
# 映射端口 22 80
EXPOSE 22 80
# 起容器
CMD java -jar /opt/demo-0.0.1-SNAPSHOT.jar --server.port=80
3.做成k8s服务化
---
apiVersion: v1
kind: Service
metadata:
name: springboot-web
labels:
version: "1.0"
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
name: springboot-web
version: "1.0"
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: springboot-ingress
spec:
rules:
- host: springboot.mychebao.com
http:
paths:
- path: /hello
backend:
serviceName: springboot-web
servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: springboot-web
labels:
name: springboot-web
version: "1.0"
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
name: springboot-web
version: "1.0"
spec:
# volumes:
# - name: data
# nfs:
# path: /youdatadir/data
# server: younasaddress
# - name: conf
# nfs:
# path: /youdir/conf
# server: younasaddress
containers:
- name: springboot
image: springboota
imagePullPolicy: IfNotPresent
resources:
requests:
memory: 1Gi
ports:
- containerPort: 80
protocol: TCP
# env:
# # - name: PASSWORD
# # value: "passwd"
# volumeMounts:
# - name: data
# mountPath: /var/lib/data/docker-entrypoint/
# - name: conf
# mountPath: /data/conf.d