Spring on Kubernetes 最佳实践(二) Java应用程序构建优化工具:Jib

什么是Jib?

  • Jib 是由Google提供的一个简化Docker容器构建的工具
  • 基于Maven或Gradle插件的方式运行
  • 不需要Docker deamon
  • 自动实施很多Docker的最佳实践

传统构建和Jib构建的区别

传统构建镜像的方式

  • Build Jar 包
  • 通过Docker构建镜像
  • 上传镜像到镜像仓库
fkzRqe2.png

Jib构建镜像方式

  • 一行命令构建,自动上传到镜像仓库


    b4uolYy.png

添加Jib到POM

打开Spring Boot应用的pom.xml文件,添加下面的plugin 和build 选项

...

   
      ...
      
          com.google.cloud.tools
          jib-maven-plugin
          1.8.0
          
             
                openjdk:8u222-slim
             
             
                k8s-demo-app
             
             
                nobody:nogroup
             
          
       
       ...
   

...

使用Jib构建一个Docker容器

现在构建一个Spring Boot应用的容器将会变得简单

$ ./mvnw clean compile jib:dockerBuild

输出如下

[INFO] Built image to Docker daemon as k8s-demo-app
[INFO] Executing tasks:
[INFO] [==============================] 100.0% complete
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:21 min
[INFO] Finished at: 2020-04-18T17:59:19+08:00
[INFO] ------------------------------------------------------------------------

NOTE: This still uses your local Docker dameon to build the container


使用Jib推送容器到私有镜像仓库

由于网络的原因,推送到 Docker Hub 在国内不是一个很好的选择,这里推荐两个国内的镜像仓库

  • 腾讯容器服务
  • 阿里云容器服务

登录私有镜像仓库

  • 你需要先登录到镜像仓库,Jib才能把镜像推送到私钥的镜像仓库中,此处使用腾讯容器服务作为演示
docker login --username=your_username --password=your_password ccr.ccs.tencentyun.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin. 
Login Succeeded

修改Jib Plugin 配置

回到pom.xml文件,需要修改一下Jib的配置,如镜像名字.我们还添加了一个执行目标,以便在运行Maven构建后进行容器构建并推送至镜像仓库

请务必替换 NAMPSPACE 为你自己的命名空间


    com.google.cloud.tools
    jib-maven-plugin
    1.8.0
    
        
            openjdk:8u222-slim
        
        
            ccr.ccs.tencentyun.com/[namespace]/k8s-demo-app
        
        
            nobody:nogroup
        
    
    
        
            package
            
                build
            
        
    


构建和部署容器

  • 现在你应该可以使用Maven build, 它将构建容器并将容器推送到镜像仓库
    ./mvnw clean package
  • 回到镜像仓库,你应该看到了你新构建的容器在镜像仓库中


    test2.png

部署到Kubernetes

参考第一篇文章,在deployment.yaml里面修改一些 images

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: k8s-demo-app
  name: k8s-demo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8s-demo-app
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: k8s-demo-app
    spec:
      containers:
      - image: ccr.ccs.tencentyun.com/[YONUR_NAMESPACE]/k8s-demo-app:latest
        name: k8s-demo-app
        imagePullPolicy: IfNotPresent
        resources: {}
status: {}

执行命令部署

kubectl apply -f ./k8s

测试

curl http://localhost:30080
hello world

简单吧,当你修改了代码之后,你只需要两条命令,就能将新的应用部署到kubernetes

./mvnw clean package
kubectl apply -f ./k8s

代码地址

你可能感兴趣的:(Spring on Kubernetes 最佳实践(二) Java应用程序构建优化工具:Jib)