使用Kubernetes(k8s)+ Docker运行Java服务(续篇)

前言

  • 本篇是继使用Kubernetes(k8s)+ Docker运行Java服务之后的续篇,那么到底是续什么呢?
  • 前面我们实现了 复杂目录结构的应用打包成容器的过程,回顾前面具体过程如下。
    • (1) 拉一个基础的操作系统镜像centos7.7.1908
    • (2)运行这个镜像。
    • (3)docker cp 复制程序进入容器中。
    • (4)写个start.sh脚本。
    • (5)docker commit生成新的镜像。
  • 步骤比较多,难道我们每次更新程序都要经历这么多步骤吗?
  • 大可不必。我们第一次这样做之后就有了一个基础镜像,在这个基础镜像基础下,写Dockerfile生成新镜像。

编写Dockerfile文件和生成镜像

  • Dockerfile文件内容如下所示。
# 以我们之前生成的login:1.0.0 为基础镜像
FROM login:1.0.0 
# 复制jar包
COPY login-1.0.0-SNAPSHOT.jar login-1.0.0-SNAPSHOT.jar 
  • 然后生成新的镜像。
docker build -t   login:1.0.1 .

重新部署

  • 然后复制下login-deployment.yaml,名称就为login-deployment-101.yaml吧,改下k8s deployment配置文件(修改为image: login:1.0.1
# 把jar包打到centos里的办法, 依赖包分离的情况
apiVersion: apps/v1
kind: Deployment
metadata:
  name: login-deployment
spec:
  replicas: 1 # 副本数量
  selector:
    matchLabels:
      app: login-deployment
  template:
    metadata:
      labels:
        app: login-deployment
    spec:
      containers:
        - name: login-deployment
          image: login:1.0.1
          #java命令-Dfile.encoding=UTF-8不能放最后,否则无效
          # command 运行java命令必须是多个字符串,把命令写在前面,不然会报no such file or directory: unknown
          # start.sh文件内容 java -Dfile.encoding=UTF-8  -cp libs/*:login-1.0.0-SNAPSHOT.jar  com.xxx.xxx.xxx.login.LoginApplication
          command: [  "/bin/sh","start.sh" ]
          imagePullPolicy: Never # 只使用本地镜像,防止ErrImagePull异常
          ports:
            - containerPort: 8089
          env: # 解决Java程序时区问题
            - name: TZ
              value: Asia/Shanghai
  • 再部署
kubectl apply -f login-deployment-101.yaml
  • 最后删除以前的deployment
kubectl delete  -f login-deployment.yaml

这种等新的deployment就绪后,再删除旧deployment,类似于滚动更新吧!不过我是在手工操作。

总结

  • 整个思路如下图所示
    在这里插入图片描述
  • 操作系统能生成新的镜像,把这新的镜像作为Dockerfile基础镜像后,又可以做很多事了。
  • 本文的操作步骤还不是很规范,不过能很好认识到基础镜像新的镜像Dockerfile的关系,距离一键部署,上Jenkins等更近一步了。

posted on 2021-11-07 12:08  愤怒的苹果ext  阅读(256)  评论(0编辑  收藏  举报

导航