gpt4 book ai didi

使用jib打包docker镜像实战

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 39 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章使用jib打包docker镜像实战由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

序 。

本文主要研究一下如何使用google的jib打包docker镜像 。

Jib 是谷歌最新开源的 Java 应用的 Docker 镜像生成工具,可以通过 Gradle 或 Maven 直接生成镜像并上传到仓库而不需要 Dockerfile 文件或者其他插件;Jib 支持将资源文件和类分层打包,可以大幅度提升生成镜像的速度 。

有一些其他的插件也可以通过 Docker 实现生成镜像,如com.palantir.docker等,但是都需要额外配置 Dockerfile, 如果应用仅需要通过 Dockerfile 构建镜像,建议使用 Jib 来提升构建和上传速度 。

maven 。

?
1
2
3
4
5
< plugin >
   < groupId >com.google.cloud.tools</ groupId >
   < artifactId >jib-maven-plugin</ artifactId >
   < version >0.9.9</ version >
</ plugin >

配置 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
< properties >
   < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding >
   < project.reporting.outputEncoding >UTF-8</ project.reporting.outputEncoding >
   < java.version >1.8</ java.version >
   < maven.build.timestamp.format >yyyyMMdd</ maven.build.timestamp.format >
</ properties >
 
 
< build >
   < plugins >
     < plugin >
       < groupId >org.springframework.boot</ groupId >
       < artifactId >spring-boot-maven-plugin</ artifactId >
     </ plugin >
     < plugin >
       < groupId >com.google.cloud.tools</ groupId >
       < artifactId >jib-maven-plugin</ artifactId >
       < version >0.9.9</ version >
       < configuration >
         < container >
           < jvmFlags >
             < jvmFlag >-Xms512m</ jvmFlag >
           </ jvmFlags >
           < ports >
             < port >8080</ port >
           </ ports >
           < useCurrentTimestamp >true</ useCurrentTimestamp >
         </ container >
         < from >
           < image >java:8u172-jre-alpine</ image >
         </ from >
         < to >
           < image >jib-demo:${maven.build.timestamp}</ image >
         </ to >
         < allowInsecureRegistries >true</ allowInsecureRegistries >
         < extraDirectory >${project.basedir}/src/main/jib</ extraDirectory >
       </ configuration >
     </ plugin >
   </ plugins >
</ build >

这里指定base image为java:8u172-jre-alpine 。

同时指定生成的image名称为jib-demo:${maven.build.timestamp} 。

container标签可以指定相关参数,比如jvmFlags指定JVM参数,ports指定expose的端口号 。

extraDirectory用于指定要添加的目录,默认为${project.basedir}/src/main/jib,即该目录下的文件夹会在docker镜像里头同步创建,目录层级关系以jib下目录层级关系为准。比如该目录下有app/resources/demo.txt,则对应该镜像目录为/app/resources/demo.txt 。

打包 。

?
1
mvn compile jib:dockerBuild -X

使用jib:dockerBuild是在本地打包镜像,不push到远程,-X参数是显示debug信息 。

如果使用jib:build命令,则打包之后push到远程 。

输出日志实例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
[DEBUG] TIMING  Building image to Docker daemon
[DEBUG] RUNNING  Building image to Docker daemon
[INFO] Getting base image java:8u172-jre-alpine...
[DEBUG] TIMING  Pulling base image manifest
[DEBUG] RUNNING  Pulling base image manifest
[DEBUG] TIMING  Building application layers
[DEBUG] RUNNING  Building application layers
[INFO] Building dependencies layer...
[DEBUG] TIMING  Building dependencies layer
[DEBUG] RUNNING  Building dependencies layer
[INFO] Building resources layer...
[DEBUG] TIMING  Building resources layer
[DEBUG] RUNNING  Building resources layer
[INFO] Building classes layer...
[DEBUG] TIMING  Building classes layer
[DEBUG] RUNNING  Building classes layer
[INFO] Building extra files layer...
[DEBUG] TIMING  Building extra files layer
[DEBUG] RUNNING  Building extra files layer
[DEBUG] TIMED  Building application layers : 3.498 ms
[DEBUG] Building application layers : 3.498 ms
[DEBUG] Building extra files layer built sha256:0a9321c621ee2c138d9a93f4ba47f825e20dd7aca0e9206f30bf560122fdaa31
[DEBUG] Building resources layer built sha256:933116c8da4db70000355b750af2f3b5c4545e74db7b5eb0a5e37689ef86d44f
[DEBUG] Building classes layer built sha256:a99dbde7d015ba3d15b9265ac38f6536d65b00dd2a864b7003a34742f483939b
[DEBUG] TIMED  Building extra files layer : 33.718 ms
[DEBUG] TIMED  Building classes layer : 33.901 ms
[DEBUG] Building extra files layer : 33.718 ms
[DEBUG] TIMED  Building resources layer : 34.062 ms
[DEBUG] Building resources layer : 34.062 ms
[DEBUG] Building classes layer : 33.901 ms
[DEBUG] Building dependencies layer built sha256:a19961ec08095eb70ca3a070945223dcf51500a255a745272276139bf0a29f4e
[DEBUG] TIMED  Building dependencies layer : 1047.83 ms
[DEBUG] Building dependencies layer : 1047.83 ms
[INFO] The base image requires auth. Trying again for java:8u172-jre-alpine...
//......
[DEBUG] TIMED  Pulling base image manifest : 8959.891 ms
[DEBUG] Pulling base image manifest : 8959.891 ms
[DEBUG] TIMING  Setting up base image caching
[DEBUG] RUNNING  Setting up base image caching
[DEBUG] TIMED  Setting up base image caching : 0.824 ms
[DEBUG] Setting up base image caching : 0.824 ms
[DEBUG] TIMING  Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827
[DEBUG] RUNNING  Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827
[DEBUG] TIMING  Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca
[DEBUG] TIMING  Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6
[DEBUG] RUNNING  Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6
[DEBUG] TIMING  Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28
[DEBUG] RUNNING  Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28
[DEBUG] RUNNING  Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca
[DEBUG] TIMED  Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827 : 612.524 ms
[DEBUG] Pulling base image layer sha256:500c0ac4cdc58aee9a008e70466eeec8a4b74b25c29d003764635d2fe1b42827 : 612.524 ms
[DEBUG] TIMED  Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28 : 9985.702 ms
[DEBUG] Pulling base image layer sha256:ff3a5c916c92643ff77519ffa742d3ec61b7f591b6b7504599d95a4a41134e28 : 9985.702 ms
[DEBUG] TIMED  Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca : 27267.144 ms
[DEBUG] Pulling base image layer sha256:aa38cd8c77d7320c7489327775e074580db5f23467198aab3e79c7db5cdfbdca : 27267.144 ms
[DEBUG] TIMED  Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6 : 54734.971 ms
[DEBUG] Pulling base image layer sha256:cb56d62302ec31640b40ca15843e7af6be145966a1064c78ea7afd6f10ce49e6 : 54734.971 ms
[DEBUG] TIMING  Building container configuration
[DEBUG] RUNNING  Building container configuration
[INFO] Finalizing...
[DEBUG] TIMED  Building container configuration : 0.462 ms
[DEBUG] Building container configuration : 0.462 ms
[INFO] Loading to Docker daemon...
[DEBUG] TIMED  Building image to Docker daemon : 65862.956 ms
[DEBUG] Building image to Docker daemon : 65862.956 ms
[INFO]
[INFO] Container entrypoint set to [java, -Xms512m, -cp, /app/resources/:/app/classes/:/app/libs/*, com.example.JibDemoApplication]
[INFO]
[INFO] Built image to Docker daemon as jib-demo:20180826
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:07 min
[INFO] Finished at: 2018-08-26T21:38:11+08:00
[INFO] Final Memory: 26M/493M
[INFO] ------------------------------------------------------------------------

查看镜像 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
docker inspect jib-demo:20180826
[
   {
     "Id": "sha256:7554492dde84091bc6d015b29ec4bf854bb841b9ec4d8f7bef8b51a8ec59ef94",
     "RepoTags": [
       "jib-demo:20180826"
     ],
     "RepoDigests": [],
     "Parent": "",
     "Comment": "",
     "Created": "2018-08-26T13:37:05.65Z",
     "Container": "",
     "ContainerConfig": {
       "Hostname": "",
       "Domainname": "",
       "User": "",
       "AttachStdin": false,
       "AttachStdout": false,
       "AttachStderr": false,
       "Tty": false,
       "OpenStdin": false,
       "StdinOnce": false,
       "Env": null,
       "Cmd": null,
       "Image": "",
       "Volumes": null,
       "WorkingDir": "",
       "Entrypoint": null,
       "OnBuild": null,
       "Labels": null
     },
     "DockerVersion": "",
     "Author": "",
     "Config": {
       "Hostname": "",
       "Domainname": "",
       "User": "",
       "AttachStdin": false,
       "AttachStdout": false,
       "AttachStderr": false,
       "ExposedPorts": {
         "8080/tcp": {}
       },
       "Tty": false,
       "OpenStdin": false,
       "StdinOnce": false,
       "Env": [
         "PATH=/opt/jdk1.8.0_172/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
         "JAVA_HOME=/opt/jdk1.8.0_172"
       ],
       "Cmd": [],
       "Image": "",
       "Volumes": null,
       "WorkingDir": "",
       "Entrypoint": [
         "java",
         "-Xms512m",
         "-cp",
         "/app/resources/:/app/classes/:/app/libs/*",
         "com.example.JibDemoApplication"
       ],
       "OnBuild": null,
       "Labels": {}
     },
     "Architecture": "amd64",
     "Os": "linux",
     "Size": 186079594,
     "VirtualSize": 186079594,
     "GraphDriver": {
       "Data": null,
       "Name": "aufs"
     },
     "RootFS": {
       "Type": "layers",
       "Layers": [
         "sha256:cd7100a72410606589a54b932cabd804a17f9ae5b42a1882bd56d263e02b6215",
         "sha256:317e0b42ef29551507adc792c2dbc389af85c5d68900cf0f08abe907cbd4e199",
         "sha256:d6fd5302a9ee64c43b46153e9678153819d6d0e247381acbbe6cbe6ed9de0366",
         "sha256:417c6bd0930eb69d17ae5d601898a6a012900ca33c69e612840a3042b2451cbb",
         "sha256:8309a5eed5158c5639acb664312ddc7027a2ecb172744f548d6d9fb5f918a744",
         "sha256:6ef8c795d7a5e2a07f51d572a90b820e089f89adf30798193f4f3f410a261415",
         "sha256:9990447f3d37e3f2dc70718d0ea6602cf7843091d8bbe395f552c9c5dd10551c",
         "sha256:ff7910aaeee962d1d86e00742030378a2758da59d8c8cda3fe44314bbddd8081"
       ]
     },
     "Metadata": {
       "LastTagTime": "0001-01-01T00:00:00Z"
     }
   }
]

可以看到java -cp指定了/app/libs/、/app/resources/、/app/classes/这三个文件夹 。

小结 。

jib默认执行如下操作 。

?
1
2
3
COPY libs /app/libs/
COPY resources /app/resources/
COPY classes /app/classes/

也就是将libs拷贝到/app/libs,将resources拷贝到/app/resources,将classes拷贝到/app/classes. 。

doc 。

  • jib
  • Building Docker Image for a Spring Boot App With Jib
  • build-containers-faster-with-jib-a-google-image-build-tool-for-java-applications

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://segmentfault.com/a/1190000016156009 。

最后此篇关于使用jib打包docker镜像实战的文章就讲到这里了,如果你想了解更多关于使用jib打包docker镜像实战的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com