当前位置:首页 > 科技  > 软件

是时候放弃Dockerfile了,考虑上手Buildpack吧

来源: 责编: 时间:2023-10-26 17:09:57 183观看
导读介绍在容器化领域,效率、速度和简单性至关重要,Buildpack 已成为一种强大的工具,可以彻底改变项目创建 Docker 镜像的过程。与需要费力创建和维护 Dockerfile 的传统方法不同,Buildpack 提供了简化且自动化的解决方案。使

介绍

在容器化领域,效率、速度和简单性至关重要,Buildpack 已成为一种强大的工具,可以彻底改变项目创建 Docker 镜像的过程。与需要费力创建和维护 Dockerfile 的传统方法不同,Buildpack 提供了简化且自动化的解决方案。使用 Buildpack,我们可以轻松构建 Docker 镜像,无论项目数量多少。接下来,我们将深入探讨下 Buildpack 。Npk28资讯网——每日最新资讯28at.com

什么是Buildpack?

Buildpack 是一个方便的工具,可以为项目快速创建 Docker 镜像,而无需单独的Dockerfiles。因此,你可以高效地 Dockerize 多个项目,而无需为每个项目编写Dockerfile 。Buildpack 会自动检测项目的编程语言和必要的依赖项,例如pom.xml、build.gradle或requirements.txt文件,只需运行一个简单的命令,即可轻松将项目集成到 CI/CD 管道中以自动创建 Docker 镜像。Npk28资讯网——每日最新资讯28at.com

Dockerfile VS Buildpack

使用 Buildpack 比使用 Dockerfile 要容易得多,因为使用 Buildpack 时,你不需要编写Dockerfile,只需运行一个简单的命令即可为项目创建 Docker 镜像。Buildpack的另一个优点是多阶段的处理。当我们为项目编写 Dockerfile 时,必须创建一个多阶段 Dockerfile,其中一个阶段用于构建(例如,对于使用 Maven 或 Gradle 的Java项目),另一个阶段用于运行(运行应用程序所需的依赖项)。例如,运行 Java 应用程序只需要 JRE,而不需要 Maven/Gradle 或其他构建工具。Npk28资讯网——每日最新资讯28at.com

Npk28资讯网——每日最新资讯28at.com

如果你希望创建一个高效的 Java/Spring Boot/Maven Dockerfile 项目,你需要制作一个两阶段的 Dockerfile,第一阶段build stage,第二阶段run stage:Npk28资讯网——每日最新资讯28at.com

####################### build stage #######################FROM openjdk:8u342-slim-buster RUN apt update & apt install -y curl tar bash ca-certificates gnupgENV NODE_MAJOR=16RUN mkdir -p /etc/apt/keyrings && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.listRUN apt update && apt install nodejs -yARG MAVEN_VERSION=3.6.3ARG BASE_URL=https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binariesRUN mkdir -p /usr/share/maven /usr/share/maven/ref /  && echo "Downlaoding maven" /  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz /  && echo "Unziping maven" /  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 /  && echo "Cleaning and setting links" /  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvnWORKDIR /workspaceADD . /workspace RUN mvn clean packageRUN mv target/*.jar target/app.jar####################### run stage #######################FROM openjdk:8u342-slim-buster WORKDIR /workspaceCOPY --from=0 /workspace/target/app.jar .ENTRYPOINT ["java", "-jar", "app.jar"]

上面的Dockerfile内容相当复杂,你需要了解 Docker 中多阶段的概念才能理解其中发生的事情。然而,Buildpack 可以让它变得简单,并且会以不同的方式生成 Docker 镜像。Npk28资讯网——每日最新资讯28at.com

左边Buildpack,右边Dockerfile左边Buildpack,右边DockerfileNpk28资讯网——每日最新资讯28at.com

什么时候使用Dockerfile

使用 Buildpack 的情况包括:Npk28资讯网——每日最新资讯28at.com

1. 没有源代码仓库的写权限,但项目构建时需要Dockerfile。如果无法访问源代码仓库的写权限,可以使用一个工具在运行时生成Dockerfile并构建Docker镜像,而无需暴露实际的Dockerfile。这样可以简化流程。Npk28资讯网——每日最新资讯28at.com

2. 如果源代码仓库中包含多种编程语言的代码,最好不要使用Buildpack,因为可能需要进行大量的定制来指示项目是用多种语言编写的。Npk28资讯网——每日最新资讯28at.com

3. 使用Buildpack非常简单和直接,当你想要节省时间和精力时,它是一个极好的选择!Npk28资讯网——每日最新资讯28at.com

安装Buildpack

安装 Buildpack 非常简单,可以从其 GitHub 版本页面下载并安装:https://github.com/buildpacks/pack。Npk28资讯网——每日最新资讯28at.com

$ wget https://github.com/buildpacks/pack/releases/download/v0.31.0/pack-v0.31.0-linux.tgz$ tar -xvzf pack-v0.31.0-linux.tgz$ sudo mv pack /usr/bin/

使用Buildpack

示例如下:Npk28资讯网——每日最新资讯28at.com

$ git clone https://github.com/paketo-buildpacks/samples$ cd samples/java/gradle$ pack build testjavadocker --env BP_JVM_VERSION=17$ docker run --rm testjavadocker

Buildpack存在的问题

  1. 无法在低版本Docker上运行需要高于 Docker 版本20才能使用较新版本的builder-jammy-base映像生成器。我在构建计算机上使用 Docker 版本19.03.5,使用 Buildpack 时遇到问题,发生了以下错误:
$ pack build test --builder=buildpacks/builder-jammy-base:0.1.0...===> ANALYZINGImage with name "test" not found===> DETECTING======== Output: paketo-buildpacks/leiningen@4.5.1 ========runtime/cgo: pthread_create failed: Operation not permittedSIGABRT: abortPC=0x7f8c2afb8a7c m=0 sigcode=18446744073709551610goroutine 0 [idle]:runtime: unknown pc 0x7f8c2afb8a7cstack: frame={sp:0x7fffb88316a0, fp:0x0} stack=[0x7fffb8032bf8,0x7fffb8831c30)0x00007fffb88315a0:  0x00007f8c2b13c723  0x00007f8c2b13c723
  1. 不支持 Maven 小版本自定义。Buildpack paketo-buildpacks/maven不支持更改Maven的小版本。如果项目无法使用Maven 3的最新版本进行编译,则需要改用Maven Wrapper。使用Maven Wrapper非常简单;只需要运行以下命令为项目初始化Maven Wrapper即可:
$ mvn wrapper:wrapper -Dmaven=3.6.3$ ./mvnw clean package
  1. Buildpack 环境变量是不可变的。默认情况下,Buildpack 会在构建容器中设置一些默认环境变量。有时你可能需要修改或删除这些变量,但是,你只能修改,不能删除。
  2. 多语言项目较难处理。如果你正在处理多语言项目,最好不要使用 Buildpack。虽然 Buildpack 确实支持多语言项目,但自定义时可能非常耗时。例如,我们有一个基于Spring framework作为后端和Vue.js前端的项目,要为其创建一个 Docker 镜像。两个部分都在一个项目中,我们必须指定以下参数来告诉 Buildpack 这是一个多语言项目:
    - BP_JVM_VERSION:描述项目的 Java 版本。
    - BP_NODE_VERSION:指定构建项目所需的 Node.js 版本。
    - BP_JAVA_INSTALL_NODE:要求 Buildpack 在构建容器上安装 Node。
    - BP_NODE_PROJECT_PATH:指定 Vue.js 文件在项目中的位置。
    定制过程可能非常复杂,尤其是对于多语言项目(不过这种场景一般不多)。
pack build test /    --env 'BP_JVM_VERSION=8' /    --env 'BP_MAVEN_BUILD_ARGUMENTS=clean package install -U' /    --env 'BP_NODE_VERSION=16.20.0' /    --env 'BP_JAVA_INSTALL_NODE=true' /    --env 'BP_NODE_PROJECT_PATH=src/main/frontend'    --builder=buildpacks/builder-jammy-base:0.1.0
  • 无互联网下的运行问题。buildpack 高度依赖互联网,如果你的构建环境是纯内网的(出于安全原因),需要更改下载源。

结论

在容器化时代,Buildpack 作为一种改变游戏规则的工具出现,可以简化为项目制作 Docker 镜像的过程。它提供了一种自动化且高效的方法,消除传统 Dockerfile 创建和维护的复杂性。凭借其能够轻松构建 Docker 镜像且无需 Dockerfile 的能力,使开发人员能够无缝处理多个项目。它擅长识别项目的编程语言和结构,允许自动创建 Docker 镜像,并将其无缝集成到 CI/CD 管道中。赶紧试试吧!Npk28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15182-0.html是时候放弃Dockerfile了,考虑上手Buildpack吧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 别再用 float 布局了,flex 才是未来!

下一篇: 被问到ReentrantLock你真的能答好吗?

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 得物宠物生意「狂飙」,发力“它经济”

    得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 微软发布Windows 11新版 引入全新任务栏状态

    微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top