docker鏡像多階段構(gòu)建的原理以及好處
2023-03-29 23:12:48 來源:騰訊云 小 中
Docker是一種流行的容器化技術(shù),可用于構(gòu)建和部署應(yīng)用程序。Docker鏡像是一種輕量級、可移植和自包含的應(yīng)用程序打包方式。Docker多階段構(gòu)建是一種構(gòu)建Docker鏡像的高效方式,可以減少鏡像大小并提高構(gòu)建速度。本文將討論Docker多階段構(gòu)建的原理、好處以及給出例子。
Docker多階段構(gòu)建的原理
Docker多階段構(gòu)建是一種構(gòu)建Docker鏡像的技術(shù),它允許開發(fā)人員在單個Dockerfile中定義多個構(gòu)建階段。每個構(gòu)建階段都可以使用不同的基礎(chǔ)鏡像和依賴項(xiàng),以便在每個階段中執(zhí)行特定的任務(wù)。每個構(gòu)建階段都可以使用前一個階段構(gòu)建的內(nèi)容,并在構(gòu)建完成后只保留所需的內(nèi)容,以最小化生成的鏡像大小。
(資料圖)
Docker多階段構(gòu)建的好處
使用Docker多階段構(gòu)建有以下幾個好處:
減小鏡像大小:每個構(gòu)建階段只包含必要的依賴項(xiàng)和文件,從而減小了生成的鏡像大小。這可以減少鏡像的存儲空間和傳輸時間。提高構(gòu)建速度:每個構(gòu)建階段可以并行執(zhí)行,因此可以提高構(gòu)建速度。而且,每個構(gòu)建階段只構(gòu)建所需的內(nèi)容,從而減少了構(gòu)建時間。簡化Dockerfile:使用多個構(gòu)建階段可以將Dockerfile分解為更小的部分,從而使Dockerfile更加易于管理和維護(hù)。每個構(gòu)建階段都可以專注于特定的任務(wù),而不必關(guān)注整個構(gòu)建過程。提高安全性:使用多個構(gòu)建階段可以限制敏感信息的泄露。例如,在第一個構(gòu)建階段中,可以包含敏感信息,例如私有密鑰或密碼。而在第二個構(gòu)建階段中,可以只包含必要的文件和依賴項(xiàng)。Docker多階段構(gòu)建的例子
下面是一個使用Docker多階段構(gòu)建的示例,用于構(gòu)建一個Node.js應(yīng)用程序的鏡像。該示例將使用兩個構(gòu)建階段,一個用于構(gòu)建應(yīng)用程序,另一個用于運(yùn)行應(yīng)用程序。
dockerfileCopy code# 第一個構(gòu)建階段,用于構(gòu)建應(yīng)用程序FROM node:14 AS buildWORKDIR /appCOPY . .RUN npm installRUN npm run build# 第二個構(gòu)建階段,用于運(yùn)行應(yīng)用程序FROM node:14-alpineWORKDIR /appCOPY --from=build /app/build ./buildRUN npm install -g serveCMD ["serve", "-s", "build"]
在上面的Dockerfile中,第一個構(gòu)建階段使用node:14鏡像構(gòu)建應(yīng)用程序,執(zhí)行npm install和npm run build命令。第二個構(gòu)建階段使用node:14-alpine鏡像運(yùn)行應(yīng)用程序,執(zhí)行npm install -g serve和CMD ["serve", "-s", "build"]命令。在第二個構(gòu)建階段中,使用--from標(biāo)志將第一個構(gòu)建階段的內(nèi)容復(fù)制到第二個構(gòu)建階段中,以便能夠構(gòu)建和運(yùn)行應(yīng)用程序。
在上面的示例中,第一個構(gòu)建階段使用node:14鏡像構(gòu)建應(yīng)用程序,這意味著應(yīng)用程序的所有依賴項(xiàng)都將包含在該鏡像中。但是,在第二個構(gòu)建階段中,使用了一個更小的node:14-alpine鏡像來運(yùn)行應(yīng)用程序。這樣可以減小生成的鏡像大小,同時提高了應(yīng)用程序的安全性。
在第一個構(gòu)建階段中,Docker會將應(yīng)用程序的源代碼復(fù)制到容器中,并執(zhí)行npm install和npm run build命令。這些命令將安裝應(yīng)用程序的依賴項(xiàng),并將應(yīng)用程序打包到build目錄中。
在第二個構(gòu)建階段中,使用了--from標(biāo)志來復(fù)制第一個構(gòu)建階段中的build目錄。然后,Docker會安裝serve工具,并將應(yīng)用程序部署到本地服務(wù)器上。
在上面的示例中,使用了兩個構(gòu)建階段來構(gòu)建應(yīng)用程序的鏡像。第一個構(gòu)建階段負(fù)責(zé)構(gòu)建應(yīng)用程序和打包文件,而第二個構(gòu)建階段負(fù)責(zé)運(yùn)行應(yīng)用程序。這種方法可以減小生成的鏡像大小,并提高應(yīng)用程序的安全性。另外,這種方法還可以提高構(gòu)建速度,因?yàn)镈ocker只需要重新構(gòu)建第一個階段,而不必重新構(gòu)建整個應(yīng)用程序。
除了上面的示例之外,還可以使用多階段構(gòu)建來構(gòu)建其他類型的應(yīng)用程序,例如Java應(yīng)用程序、Go應(yīng)用程序和Python應(yīng)用程序等。下面是一個使用多階段構(gòu)建來構(gòu)建Java應(yīng)用程序的示例。
dockerfileCopy code# 第一個構(gòu)建階段,用于構(gòu)建Java應(yīng)用程序FROM maven:3.8-jdk-11 AS buildWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offlineCOPY src ./srcRUN mvn package# 第二個構(gòu)建階段,用于運(yùn)行Java應(yīng)用程序FROM openjdk:11-jre-slimWORKDIR /appCOPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar ./demo.jarEXPOSE 8080CMD ["java", "-jar", "demo.jar"]
在上面的Dockerfile中,第一個構(gòu)建階段使用maven:3.8-jdk-11鏡像構(gòu)建Java應(yīng)用程序。在這個階段中,Docker會將應(yīng)用程序的依賴項(xiàng)下載到本地,并將應(yīng)用程序打包到target目錄中。第二個構(gòu)建階段使用openjdk:11-jre-slim鏡像運(yùn)行Java應(yīng)用程序。在這個階段中,使用--from標(biāo)志將第一個構(gòu)建階段中的應(yīng)用程序復(fù)制到容器中,然后使用java命令運(yùn)行應(yīng)用程序。
關(guān)鍵詞:
相關(guān)文章
- docker鏡像多階段構(gòu)建的原理以及好處
- 東陽光:合資公司擬投建桐梓縣鋁多金屬礦資源開發(fā)項(xiàng)目:全球快播
- 迪士尼控股的流媒體巨頭Hulu將在北京裁員逾90% 焦點(diǎn)熱文
- 美國能源部:上周美國EIA原油庫存意外銳減將近750萬桶 當(dāng)前熱訊
- 歐盟達(dá)成里程碑協(xié)議,批準(zhǔn)2035年起禁售化石燃料新車
- 今日播報!空倉看一天
- 中海油2022年業(yè)績總結(jié)
- 中海油的業(yè)績解析與展望|全球百事通
- 綻開春光無限 放飛凌云之志:成都心意溫暖五洲賓朋
- 凱龍股份:擬定增募資不超過8.5億元
- 金山云:預(yù)計(jì)一季度總收入18.5億元-20.5億元_快消息
- 凱普生物與華大智造戰(zhàn)略合作 拓展基因測序國際市場 環(huán)球聚焦
- 天天觀點(diǎn):中國石油:2022年歸母凈利1493.8億元 同比增長62.1%
- 要聞:廣汽集團(tuán):2022年凈利同比增10% 擬10派1.8元
- 中海油2023年-季度油氣產(chǎn)量
- 怎樣才算股票投資的高手? 全球看點(diǎn)
- 德賽西威:2022年凈利同比增長42.13% 擬10派5.5元:天天信息
- 今日關(guān)注:大降價!治療甲流的磷酸奧司他韋平均降價83%!
- 天天消息![快訊]聯(lián)泓新科公布年報
- 中華企業(yè):2022年凈利潤2305.45萬元 同比降97.14%
- 江蘇將對蘇州機(jī)場、宿遷機(jī)場等重大儲備項(xiàng)目深化前期研究
- 融捷股份:收到甘孜州經(jīng)信局《關(guān)于康瀘產(chǎn)業(yè)集中區(qū)總體規(guī)劃環(huán)評進(jìn)展和鴛鴦壩綠色鋰產(chǎn)業(yè)園項(xiàng)目投資及建設(shè)的復(fù)函》
- 淮北礦業(yè):下屬公司陶忽圖煤礦取得采礦許可證
- 唐山港:2022年扣非凈利同比降4.25% 擬10派2元-世界微速訊
- 東鵬飲料:牛磺酸維生素飲料獲國產(chǎn)保健食品注冊證書 天天速看
- 【環(huán)球聚看點(diǎn)】巴西礦業(yè)巨頭淡水河谷在華簽署七項(xiàng)合作文件
- 中國中冶:2022年凈利102.72億元 同比增長22.66%_天天播報
- 世界快看:中華企業(yè):2022年凈利同比降97.14%
- 復(fù)星國際:2022年歸屬于母公司股東利潤為5.4億元 同比降94.7%:焦點(diǎn)精選
- 焦點(diǎn)熱議:依依股份:2022年凈利同比增31.96% 擬10轉(zhuǎn)4派5元
熱文推薦
排行推薦

歐盟達(dá)成里程碑協(xié)議,批準(zhǔn)2035年起禁售化石燃料新車

今日播報!空倉看一天

中海油2022年業(yè)績總結(jié)
