[case34]jib打包docker镜像实战

位流星云
• 阅读 4445

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

maven

            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>0.9.9</version>
            </plugin>

配置

    <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

打包

mvn compile jib:dockerBuild -X
  • 使用jib:dockerBuild是在本地打包镜像,不push到远程,-X参数是显示debug信息
  • 如果使用jib:build命令,则打包之后push到远程

输出日志实例:

[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] ------------------------------------------------------------------------

查看镜像

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默认执行如下操作

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

doc

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
springboot使用之快捷打包部署
本篇关键知识点:Maven的assembly插件实现自定义打包部署(包含依赖jar包) 目前springboot项目的几种常见的部署方式。1\.使用docker容器去部署,将springboot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在
Stella981 Stella981
4年前
Docker 系列:打包新镜像到阿里云镜像仓库
一、.JibJava应用构建容器镜像1.Jib介绍Jib是Google开发的可以直接构建Java应用的Docker和OCI镜像的类库,以 Maven 和 Gradle 插件形式提供。通过Jib,Java开发者可以使用他们熟悉的Java工具来构建容器。Jib是一个快速而简单的容器镜像构建工具,它负责处理
Stella981 Stella981
4年前
Docker基础(1) 原理篇
Docker是什么Docker的构成Docker的分层和写时拷贝策略Docker与主流虚拟机的区别Docker镜像与容器的关系镜像的变更管理Docker是什么Docker是一个开源的应用容器引擎。它的理念是“Buildonce,Runanywhere,Configureonce
Stella981 Stella981
4年前
Docker搭建Mysql容器
转载自:http://blog.csdn.net/Mungo/article/details/78521832?locationNum9&fps1本文介绍如何使用docker迅速搭建MySQL的运行环境。使用dockerhub镜像查找镜像首先查找DockerHub上的mysql镜像,有两种方式:
Stella981 Stella981
4年前
Docker:dockerfile构建php项目 [八]
一、把项目封装成docker镜像的步骤把项目封装成docker镜像的步骤:1、先运行一个基础容器,手动制作docker镜像2、编写dockerfile,构建镜像3、测试运行二、dockerfile常用指令参考1、dockerfile常用指令:
Stella981 Stella981
4年前
Docker学习笔记
docker通过带环境安装来解决开发和运维之间的鸿沟问题,属于云计算方面的技术。也就是说安装的时候把原始环境一模一样地复制过来,开发人员利用Docker来消除协作代码时,“在我的机器上可以正常工作啊"的问题。一次构建,处处运行。dev本地测试完毕后,打包递交docker镜像,而运维则只装一个docker作为鲸鱼,将各个镜像放到鲸鱼背上作为独立的集装箱
Stella981 Stella981
4年前
Docker 类面试题(常见问题)
Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimagesqfdangingtrue)命令2、如何查看镜像支持的环境变量?使用sudodockerrunIMAGEenv3、本地的镜像文件都存放在哪里于D
Stella981 Stella981
4年前
Docker学习——多阶段构建(六)
之前的做法在Docker17.05版本之前,我们构建Docker镜像时,通常会采用两种方式:全部放入一个Dockerfile一种方式是将所有的构建过程编包含在一个Dockerfile中,包括项目及其依赖库的编译、测试、打包等流程,这里可能会带来的一些问题:1、Dockerfile特别长,可维护性降低2、镜像层次多,镜像体积较大,
Wesley13 Wesley13
4年前
01_docker镜像命令
docker镜像命令1\.dockerimages参数:\a:列出本地所有的镜像\q:只显示镜像id\digests:显示镜像的摘要信息\notrunc:显示完整的镜像信息dockerimagesd
Stella981 Stella981
4年前
Docker镜像管理
Docker镜像管理创建镜像镜像的创建有以下几种方法:使用ISO镜像:回顾下OpenStack,我们在创建虚拟机的时候,首先使用iso安装定制了镜像上传到Glance上面,对于Docker来说,我们同样可以使用ISO镜像来制作基本镜像。使用工具制作镜像:不同的操作系统都提供了相应的工具来让用户创建Docker镜像
Stella981 Stella981
4年前
Docker 最常用的镜像命令和容器命令
  本文列出了Docker使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份。熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习Docker的镜像构建、备份恢复迁移、镜像仓库、网络、集群等等更多的内容。镜像相关命令  官方文档:https://docs.docker.com/r
位流星云
位流星云
Lv1
风尘荏苒音书绝,关塞萧条行路难。
文章
5
粉丝
0
获赞
0