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

看我如何將Docker鏡像大小縮減95%

譯文 精選
開發
使用Docker多階段構建的概念

作者丨Pavan Kumar

譯者 | 崔瑩峰

策劃丨諾亞

  編寫Dockerfile看起來很容易,除非你最終編寫了大小為0.5GB的Docker鏡像。是的,沒錯。我最近在做一個ReactJS項目,在那里我正在構建一個前端應用程序。React JS項目沒有什么新鮮的。我使用了與典型前端應用程序相同的package.json,相同的依賴集。現在,我決定將應用程序遷移到Kubernetes。所以我將Docker鏡像推送到DockerHub并嘗試在Kubernetes部署Pod。

  我使用的是一個本地集群,Pod花了5分零7秒啟動。我很驚訝。然后我將其部署到AKS集群(Azure Kubernetes集群)。令人驚訝的是,它花了3分40秒。這可是件大事。我嘗試對Pod進行壓測以觸發Kubernetes HPA(Horizontal Pod Autoscaler)。新的Pod需要同樣的3分鐘才能出現,最終應用程序被太多的請求淹沒,不堪重負以致崩潰不斷重啟。經過調查,我發現鏡像的大小是瓶頸,當然,你不會想要如此巨大的Docker鏡像(0.5GB)。那時我意識到我必須對Docker鏡像大小做些什么。因此,我使用了Docker多階段構建的概念。

Docker構建:

FROM node:alpine
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
COPY ./ ./
RUN npm i
CMD ["npm", "run", "start"]

  這是我最初的一個Dockerfile,它是為一個典型的ReactJS應用程序提供的。如果你打開查看,你就可以看到第一行代碼,我使用了node:alpine作為基礎鏡像,如下是鏡像構建完成后的尺寸。

圖片

非多階段構建

  這是構建鏡像的典型方法,編寫這樣的Docker文件似乎很容易。但是從Kubernetes的角度來看,使用這種方法存在一些缺點如下

  a)鏡像的大小直接影響Pod啟動時間。

      b)鏡像越小,Pod啟動越快。

Docker多階段構建:

  Dockerfile中的多階段構建特性使你能夠創建具有更好緩存和占用更小安全空間的較小容器鏡像。使用多階段構建,你可以在Dockerfile中使用多個FROM語句。每個FROM指令可以使用不同的基礎鏡像,并且每個FROM指令都會開始構建一個新的階段。你可以有選擇地將一個階段構建好的內容復制到另一個階段,對于那些不需要出現在在最終鏡像里的內容就留在上一個階段好了。

  似乎不一樣?好吧,讓我們了解一下這個文件。

# Choose the Image which has Node installed already
FROM node:alpine as build
WORKDIR /code
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm ci --production
# COPY all the files from Current Directory into the Container
COPY . .
# Install the Project Dependencies like Express Framework
RUN npm run build
FROM nginx:1.22-alpine as prod
COPY --from=build /code/build /usr/share/nginx/html
# Tell that this image is going to Open a Port
EXPOSE 80
# Default Command to launch the Application
CMD ["nginx", "-g", "daemon off;"]

  第一行稱為階段。這些階段沒有命名,你通過它們的整數來引用它們,從0開始表示第一條FROM指令。或者,你也可以通過向FROM指令添加AS來命名階段。

  然后其余的步驟保持不變。改變游戲規則的一個步驟是COPY——來自(第18行)。使用多階段生成時,可以在Docker文件中使用多個FROM語句。每個FROM指令都可以使用不同的基礎鏡像,并且每個指令都開始構建一個新的階段。你可以有選擇地將一個階段構建好的內容復制到另一個階段,對于那些不需要出現在在最終鏡像里的內容就留在上一個階段好了。

  現在讓我們開始構建鏡像。

圖片

多階段構建鏡像尺寸

  哇,是的!圖像大小壓縮了95%。圖像大小現在是27.2MB。

  我的本地集群花了25秒來拉取鏡像并開始使用。我的AKS集群花了10秒鐘來拉取鏡像并開始使用。

  這就是如何利用Docker中的多階段構建來壓縮Docker鏡像的大小。

  原文鏈接:

  ??https://levelup.gitconnected.com/how-i-reduced-the-size-of-my-docker-image-by-95-520a05439300??

譯者簡介

  崔瑩峰,51CTO社區編輯,一名70后程序員,擁有10多年工作經驗,長期從事 Java開發,架構設計,容器化等相關工作。

責任編輯:張潔 來源: 51CTO技術棧
相關推薦

2023-11-06 13:11:22

Docker映像Builkit

2019-07-15 10:00:53

DockerJava容器

2023-12-29 07:04:28

Go項目Docker編寫

2019-07-15 16:00:24

Docker架構容器

2009-02-19 16:59:10

虛擬化VMware虛擬磁盤

2020-08-23 11:52:10

Docker容器技術

2024-11-01 12:10:57

2009-08-26 18:05:25

ViewState持久

2023-02-17 12:07:45

ChatGPTPython

2018-06-12 15:07:57

IT

2011-05-18 14:51:43

2012-11-07 15:57:34

OSSECMYSQL

2011-11-08 15:15:40

路由器復位

2015-10-28 14:59:26

JAVA插件Chrome

2009-06-11 10:50:27

netbeans配置

2017-01-05 09:18:12

容器Docker

2024-01-15 08:59:31

Docker優化

2009-03-04 10:27:50

Provisionin桌面虛擬化Xendesktop

2009-08-04 08:34:13

Windows 7系統創新

2013-12-06 10:31:42

IT部門縮減
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩久久久久久 | 中文字幕乱码一区二区三区 | 日本偷偷操| 亚洲电影成人 | 中文字幕免费观看 | 一区二区三区四区不卡 | 视频一区中文字幕 | 亚洲一区二区av | 国产伦精品一区二区三区在线 | 亚洲iv一区二区三区 | 免费av观看 | 欧美视频免费在线 | 婷婷亚洲综合 | 天天操天天摸天天干 | 毛片a级毛片免费播放100 | 欧美激情视频网站 | 色婷婷综合久久久中字幕精品久久 | 国产成人精品a视频一区www | 天堂网中文字幕在线观看 | 久久精品国产一区老色匹 | 欧美自拍一区 | 日本在线视频一区二区 | 亚洲成人综合在线 | 久久亚洲一区二区 | 久久福利电影 | 日本三级网址 | 精品久久久久久久人人人人传媒 | 色综合成人网 | 欧美性猛交一区二区三区精品 | 男人av网| 成人h视频在线 | 国产精品国产a | 国产免费又色又爽又黄在线观看 | 久久久99精品免费观看 | 中文区中文字幕免费看 | 国产欧美精品 | 三级视频在线观看电影 | 国产精品免费一区二区三区 | 日本高清在线一区 | a在线v| 日韩网站在线 |