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

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐