美文网首页
Buildah:一种可编程方式来构建容器镜像

Buildah:一种可编程方式来构建容器镜像

作者: 在巴黎塔顶看东京樱花 | 来源:发表于2018-12-13 18:47 被阅读0次

        Buildah是一个命令行工具,他提供了一种灵活、可脚本编程式的构建容器镜像的功能,并且其构建出的镜像符合OCI(开放容器标准),可以与通过Docker方式构建出的镜像兼容,即通过Buildah构建出的镜像可以通过Docker与Kubernetes运行。Buildah 可以轻松与脚本集成并生成构建流水线,最大优势在于构建镜像的过程不再需要运行Docker的守护进程。

特点

       Buildah支持通过其原生命令来构建容器镜像,支持对云原生应用程序中所需的部分进行定制。Buildah通过一种简单且安全的方式来构建容器镜像,并且可以避免安装那些最终容器镜像不需要的组建,例如yum,dnf等,消除了镜像的过于臃肿。另外,由于Buildah无需类似Docker守护进程的支持,它也可以更加方便的在容器里面执行。

        Buildah在构建镜像期间,支持对外部卷进行读写操作,这样在构建过程中可以引用外部卷中的镜像文件,而在生成最终镜像时却不用将外部卷的内容装载到最终镜像中。

构建过程

buildah通过脚本或者命令来构建容器镜像过程如下:

1:获取基础镜像openjdk:8-jdk-alpine

    buildah from openjdk

2:将jar包拷贝到镜像中

    buildah copy openjdk-working-container  demo-1.0.0-SNAPSHOT.jar  /tmp/demo-1.0.0-SNAPSHOT.jar

3:配置容器启动入口点

    buildah config --entrypoint "java -jar /tmp/demo-1.0.0-SNAPSHOT.jar" openjdk-working-container

4:通过commit命令将其保存为镜像文件

    buildah commit openjdk-working-container buildah-demo-image

命令构建容器镜像

buildah通过dockerfile构建容器镜像过程如下,直接通过buildah build-using-dockerfile替代docker build指令便可实现,

Dockerfile构建容器镜像

与Docker异同

       Buildah也可以作为docker build命令的一种替换。通常我们通过Docker根据Dokcerfile构建容器镜像时需要通过docker build命令,如 " docker build -t hello . ",然而通过Buildah的build-using-dockerfile(或bud)可以实现与docker build的等价替换,即 " bud -t hello . "等价于" docker build -t hello . ",可以轻松地实现与现有Dockerfile构建脚本的结合使用。同样构建结束之后,我们可以通过" buildah images "命令查看通过Buildah构建出的容器镜像,通过" buildah push {repository} "命令将容器镜像文件推送到远程仓库。

      虽然 "docker build" 与 "build-using-dockerfile" 命令最终都可以构建出容器镜像,但是构建构建过程略有不同。通过Docker构建镜像时,每执行一条Dockerfile中的指令,都会对上一层生成的镜像通过增加扩充的形式生成新的一层。而Buildah则是通过无缓冲的形式进行构建,从头至尾依次执行构建脚本文件中的命令,最终生成容器镜像文件,这种构建方式可以十分有效的提高构建效率,在构建复杂的容器镜像时优势尤为明显,但缺失了中间缓存层会造成在每次构件时都会重复执行构建指令。           

相关文章

网友评论

      本文标题:Buildah:一种可编程方式来构建容器镜像

      本文链接:https://www.haomeiwen.com/subject/vabehqtx.html