成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

是時候放棄Dockerfile了,考慮上手Buildpack吧

開發(fā)
在容器化領(lǐng)域,效率、速度和簡單性至關(guān)重要,Buildpack 已成為一種強大的工具,可以徹底改變項目創(chuàng)建 Docker 鏡像的過程。與需要費力創(chuàng)建和維護 Dockerfile 的傳統(tǒng)方法不同,Buildpack 提供了簡化且自動化的解決方案。

介紹

在容器化領(lǐng)域,效率、速度和簡單性至關(guān)重要,Buildpack 已成為一種強大的工具,可以徹底改變項目創(chuàng)建 Docker 鏡像的過程。與需要費力創(chuàng)建和維護 Dockerfile 的傳統(tǒng)方法不同,Buildpack 提供了簡化且自動化的解決方案。使用 Buildpack,我們可以輕松構(gòu)建 Docker 鏡像,無論項目數(shù)量多少。接下來,我們將深入探討下 Buildpack 。

什么是Buildpack?

Buildpack 是一個方便的工具,可以為項目快速創(chuàng)建 Docker 鏡像,而無需單獨的Dockerfiles。因此,你可以高效地 Dockerize 多個項目,而無需為每個項目編寫Dockerfile 。Buildpack 會自動檢測項目的編程語言和必要的依賴項,例如pom.xml、build.gradle或requirements.txt文件,只需運行一個簡單的命令,即可輕松將項目集成到 CI/CD 管道中以自動創(chuàng)建 Docker 鏡像。

Dockerfile VS Buildpack

使用 Buildpack 比使用 Dockerfile 要容易得多,因為使用 Buildpack 時,你不需要編寫Dockerfile,只需運行一個簡單的命令即可為項目創(chuàng)建 Docker 鏡像。Buildpack的另一個優(yōu)點是多階段的處理。當(dāng)我們?yōu)轫椖烤帉?Dockerfile 時,必須創(chuàng)建一個多階段 Dockerfile,其中一個階段用于構(gòu)建(例如,對于使用 Maven 或 Gradle 的Java項目),另一個階段用于運行(運行應(yīng)用程序所需的依賴項)。例如,運行 Java 應(yīng)用程序只需要 JRE,而不需要 Maven/Gradle 或其他構(gòu)建工具。

如果你希望創(chuàng)建一個高效的 Java/Spring Boot/Maven Dockerfile 項目,你需要制作一個兩階段的 Dockerfile,第一階段build stage,第二階段run stage:

####################### build stage #######################
FROM openjdk:8u342-slim-buster 

RUN apt update & apt install -y curl tar bash ca-certificates gnupg

ENV NODE_MAJOR=16
RUN 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.list
RUN apt update && apt install nodejs -y

ARG MAVEN_VERSION=3.6.3
ARG BASE_URL=https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries
RUN 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/mvn

WORKDIR /workspace

ADD . /workspace 

RUN mvn clean package

RUN mv target/*.jar target/app.jar


####################### run stage #######################
FROM openjdk:8u342-slim-buster 

WORKDIR /workspace

COPY --from=0 /workspace/target/app.jar .

ENTRYPOINT ["java", "-jar", "app.jar"]

上面的Dockerfile內(nèi)容相當(dāng)復(fù)雜,你需要了解 Docker 中多階段的概念才能理解其中發(fā)生的事情。然而,Buildpack 可以讓它變得簡單,并且會以不同的方式生成 Docker 鏡像。

左邊Buildpack,右邊Dockerfile左邊Buildpack,右邊Dockerfile

什么時候使用Dockerfile

使用 Buildpack 的情況包括:

1. 沒有源代碼倉庫的寫權(quán)限,但項目構(gòu)建時需要Dockerfile。如果無法訪問源代碼倉庫的寫權(quán)限,可以使用一個工具在運行時生成Dockerfile并構(gòu)建Docker鏡像,而無需暴露實際的Dockerfile。這樣可以簡化流程。

2. 如果源代碼倉庫中包含多種編程語言的代碼,最好不要使用Buildpack,因為可能需要進行大量的定制來指示項目是用多種語言編寫的。

3. 使用Buildpack非常簡單和直接,當(dāng)你想要節(jié)省時間和精力時,它是一個極好的選擇!

安裝Buildpack

安裝 Buildpack 非常簡單,可以從其 GitHub 版本頁面下載并安裝:https://github.com/buildpacks/pack。

$ 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

示例如下:

$ 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映像生成器。我在構(gòu)建計算機上使用 Docker 版本19.03.5,使用 Buildpack 時遇到問題,發(fā)生了以下錯誤:
$ pack build test --builder=buildpacks/builder-jammy-base:0.1.0
...
===> ANALYZING
Image with name "test" not found
===> DETECTING
======== Output: paketo-buildpacks/leiningen@4.5.1 ========
runtime/cgo: pthread_create failed: Operation not permitted
SIGABRT: abort
PC=0x7f8c2afb8a7c m=0 sigcode=18446744073709551610

goroutine 0 [idle]:
runtime: unknown pc 0x7f8c2afb8a7c
stack: 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 環(huán)境變量是不可變的。默認(rèn)情況下,Buildpack 會在構(gòu)建容器中設(shè)置一些默認(rèn)環(huán)境變量。有時你可能需要修改或刪除這些變量,但是,你只能修改,不能刪除。
  2. 多語言項目較難處理。如果你正在處理多語言項目,最好不要使用 Buildpack。雖然 Buildpack 確實支持多語言項目,但自定義時可能非常耗時。例如,我們有一個基于Spring framework作為后端和Vue.js前端的項目,要為其創(chuàng)建一個 Docker 鏡像。兩個部分都在一個項目中,我們必須指定以下參數(shù)來告訴 Buildpack 這是一個多語言項目:
    - BP_JVM_VERSION:描述項目的 Java 版本。
    - BP_NODE_VERSION:指定構(gòu)建項目所需的 Node.js 版本。
    - BP_JAVA_INSTALL_NODE:要求 Buildpack 在構(gòu)建容器上安裝 Node。
    - BP_NODE_PROJECT_PATH:指定 Vue.js 文件在項目中的位置。
    定制過程可能非常復(fù)雜,尤其是對于多語言項目(不過這種場景一般不多)。
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
  • 無互聯(lián)網(wǎng)下的運行問題。buildpack 高度依賴互聯(lián)網(wǎng),如果你的構(gòu)建環(huán)境是純內(nèi)網(wǎng)的(出于安全原因),需要更改下載源。

結(jié)論

在容器化時代,Buildpack 作為一種改變游戲規(guī)則的工具出現(xiàn),可以簡化為項目制作 Docker 鏡像的過程。它提供了一種自動化且高效的方法,消除傳統(tǒng) Dockerfile 創(chuàng)建和維護的復(fù)雜性。憑借其能夠輕松構(gòu)建 Docker 鏡像且無需 Dockerfile 的能力,使開發(fā)人員能夠無縫處理多個項目。它擅長識別項目的編程語言和結(jié)構(gòu),允許自動創(chuàng)建 Docker 鏡像,并將其無縫集成到 CI/CD 管道中。趕緊試試吧!

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2024-01-24 18:53:54

VMwareVMHorizon

2023-10-26 21:41:45

云計算企業(yè)云基礎(chǔ)

2020-08-26 10:23:24

物聯(lián)網(wǎng)數(shù)據(jù)IOT

2013-07-18 14:18:19

機器智商

2017-03-07 15:07:23

葉脊網(wǎng)絡(luò)架構(gòu)

2014-04-08 15:27:57

Windows Ser

2020-05-08 10:34:30

Spring非阻塞編程

2020-09-30 01:00:00

混合云多云網(wǎng)絡(luò)云計算

2023-10-19 15:25:40

2023-10-30 11:01:37

Buildpack云原生

2020-10-12 10:53:09

數(shù)據(jù)中心

2023-03-14 16:23:55

Apache Dor架構(gòu)開發(fā)

2018-08-21 05:12:10

2017-02-17 07:46:29

2024-01-02 07:34:38

CentOSLinuxRedhat

2023-07-07 09:08:21

2013-06-05 13:49:41

EclipseIntelliJ

2015-06-15 11:05:13

DCIM數(shù)據(jù)中心

2015-04-07 10:51:05

2021-10-09 14:35:20

物聯(lián)網(wǎng)IOT人工智能
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天看天天操 | 亚洲成人精品一区 | 91在线视频国产 | 激情欧美一区二区三区 | 四虎永久免费在线 | 日韩高清中文字幕 | 黄色中文字幕 | 久久精品亚洲精品 | 一区二区三区日本 | 九九九久久国产免费 | 国产精品一区久久久 | 国产精品久久久久久久久免费软件 | 久久伊人影院 | 九九热在线免费视频 | 一区二区激情 | 免费一区二区 | 91在线视频精品 | 手机看片1 | 日韩精品一 | 免费人成在线观看网站 | av中文字幕网 | 久久精品视频在线免费观看 | 久久精品日产第一区二区三区 | 国产精品免费在线 | 日韩免费中文字幕 | 天天看天天摸天天操 | 日本电影一区二区 | 国产区视频在线观看 | 欧美精品成人一区二区三区四区 | 午夜小视频在线播放 | 动漫www.被爆羞羞av44 | 亚洲欧美国产精品一区二区 | 亚洲第一在线 | 欧美成人a∨高清免费观看 欧美日韩中 | 一区二区三区不卡视频 | 国产视频久 | 国产精品久久久久久久免费大片 | 日韩在线视频观看 | 国产最新精品视频 | 日韩在线一区二区 | 中文字幕精品一区 |