什么是Jib?
- Jib 是由Google提供的一个简化Docker容器构建的工具
- 基于Maven或Gradle插件的方式运行
- 不需要Docker deamon
- 自动实施很多Docker的最佳实践
传统构建和Jib构建的区别
传统构建镜像的方式
- Build Jar 包
- 通过Docker构建镜像
- 上传镜像到镜像仓库
Jib构建镜像方式
-
一行命令构建,自动上传到镜像仓库
b4uolYy.png
添加Jib到POM
打开Spring Boot应用的pom.xml文件,添加下面的plugin 和build 选项
...
<build>
<plugins>
...
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.8.0</version>
<configuration>
<from>
<image>openjdk:8u222-slim</image>
</from>
<to>
<image>k8s-demo-app</image>
</to>
<container>
<user>nobody:nogroup</user>
</container>
</configuration>
</plugin>
...
</plugins>
</build>
...
使用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 为你自己的命名空间
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.8.0</version>
<configuration>
<from>
<image>openjdk:8u222-slim</image>
</from>
<to>
<image>ccr.ccs.tencentyun.com/[namespace]/k8s-demo-app</image>
</to>
<container>
<user>nobody:nogroup</user>
</container>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
构建和部署容器
- 现在你应该可以使用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
网友评论