一、打包镜像

1、编写Dockerfile

FROM java:8 #基础镜像
MAINTAINER wayne #作者
COPY springbootDemo.jar /springbootdemo.jar #将当前目录下的springbootDemo.jar打包成docker容器内部根目录下的springbootdemo.jar
EXPOSE 8081 #对外暴漏8081
ENTRYPOINT ["java","-jar","/springbootdemo.jar"] #命令用于指定这个容器启动的时候要运行的命令

2、打包镜像

执行如下命令后,查看镜像

docker build -t springbootdemo:20221016v1 .

 3,运行容器

docker run -d -p 8081:8081 --name springbootdemo springbootdemo:20221016v1

4,浏览器验证

二、推送镜像到本地仓库 

1、将刚刚的镜像打tag

docker tag springbootdemo:20221016v1 192.168.199.103:5000/springbootdemo:20221016v1

查看是否打成功

2、推送镜像到私有仓库

docker push 192.168.199.103:5000/springbootdemo:20221016v1

 等待推送完成即可

三、搭建k8s对应的服务

 1,编写配置命令文件

   举例说明

#Deployment配置
apiVersion: apps/v1 #版本号
kind: Deployment #类型
metadata:
    name: spring-boot-demo-deploy #名称
    namespace: dev #所属命名空间
    labels: #标签
        controller: spring-boot-demo-deploy
spec: #规格描述
    replicas: 2 #POD的副本数量
    revisionHistoryLimit: 10 #历史rs的版本数量
    paused: false #暂停部署
    progressDeadlineSeconds: 600 #部署超时时间单位秒
    strategy: #策略
        type: RollingUpdate #滚动更新
        rollingUpdate: #滚动更新的具体配置
            maxSurge: 30% #最大额外可存在的副本数
            maxUnavailable: 30% #最大不可用状态的Pod的数量
    selector: #标签选择器,通过它管理pod
        matchLabels: 
            app: spring-boot-demo-pod
        matchExpressions: #Expression匹配规则
           - {key: app, operator: In, values: [spring-boot-demo-pod]}
    template: #pod创建模版
        metadata:
            name: spring-boot-demo-pod
            namespace: dev
            labels: #标签,用于被deployment识别
              - app: spring-boot-demo-pod
        spec: 
            containers: #Pod中容器属性
              - name: spring-boot-demo
                image: 192.168.199.103:5000/springbootdemo:20221016v1
                imagePullPolicy: [IfNotPresent]
                ports: #端口
                  - name: app-port #端口名称
                    containerPort: 8081 # 容器需要监听的端口号
                    protocol: TCP #端口协议
                resources: #资源限制
                    limits: 
                       cpu: 2 #cpu限制
                       memory: 2Gi #内存限制
                    request:
                       cpu: 0.5  #cpu请求人,容器启动时的初始容量
                       memory: 0.5Gi #内存请求,容器启动时的初始容量
                volumeMounts:
                   - name: spring-boot-demo-config #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
                     mountPath: '/' #存储卷在容器内moount的绝对路径,应少于512字符
            nodeName: node2 #将POD调度到指定节点
            imagePullSecrets: 
                - name: wayne-docker-registry-key
            volumes: #共享存储卷列表
                - name: spring-boot-demo-config 
                  configMap:
                     name: spring-boot-demo-config

--- 

#ConfigMap配置
apiVersion: v1
kind: ConfigMap
metadata:
    name: spring-boot-demo-config
    namespace: dev
data:
    application.yml: |-
        server.port: 8081
        server.servlet.context-path: /myTest                 
                

---

#Service配置
apiVersion: v1
kind: Service
metadata:
    name: spring-boot-demo-service
    namespace: dev
spec:
    selector:
        app: spring-boot-demo-pod
    type: ClusterIP #有ClusterIP(固定ip),NodePort(暴露Node的端口,外部可以直接访问)
    clusterIP: 10.97.97.97
    ports:
      - ports: 8081 #service的port
        targetPort: 8081 #pod的port

说明

编写这个yaml,最好用一些文本编译工具。不然就GG

 

2,创建deploy、svc和pod

 kubectl create -f spring-boot-demo.yaml -n dev

 3,通过命令查看pod是否启动

 4,访问svc对应的ip看结果

 

Logo

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

更多推荐