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

Docker鏡像瘦身:從1.43G到22.4MB

云計算
Docker 鏡像的大小對于系統的 CI/CD 等都有影響,尤其是云部署場景。我們在生產實踐中都會做瘦身的操作,盡最大的可能使用 Size 小的鏡像完成功能。

[[420174]]

圖片來自 包圖網

下文是一個簡單的 ReactJS 程序上線的瘦身體驗,希望可以幫助大家找到鏡像瘦身的方向和靈感。

如果你正在做 Web 開發相關工作,那么你可能已經知道容器化的概念,以及知道它強大的功能等等。

但在使用 Docker 時,鏡像大小至關重要。我們從 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)獲得的樣板項目通常都超過 1.43 GB。

今天,我們將容器化一個 ReactJS 應用程序,并學習一些關于如何減少鏡像大小并提高性能的技巧。

我們將以 ReactJS 為例,但它適用于任何類型的 NodeJS 應用程序。

步驟 1:創建項目

①借助腳手架通過命令行模式創建 React 項目:

  1. npx create-react-app docker-image-test 

②命令執行成功后將生成一個基礎 React 應用程序架構。

③我們可以進入項目目錄安裝依賴并運行項目:

  1. cd docker-image-test 
  2. yarn install 
  3. yarn start 

④通過訪問 http://localhost:3000 可以訪問已經啟動的應用程序。

步驟 2:構建第一個鏡像

①在項目的根目錄中創建一個名為 Dockerfile 的文件,并粘貼以下代碼:

  1. FROM node:12 
  2.  
  3. WORKDIR /app 
  4.  
  5. COPY package.json ./ 
  6.  
  7. RUN yarn install 
  8.  
  9. COPY . . 
  10.  
  11. EXPOSE 3000 
  12.  
  13. CMD ["yarn""start"

②注意,這里我們從 Docker 倉庫獲得基礎鏡像 Node:12,然后安裝依賴項并運行基本命令。(我們不會在這里討論 Docker 命令的細節)

③現在可以通過終端為容器構建鏡像:

  1. docker build -t docker-image-test . 

④Docker 構建鏡像完成之后,你可以使用此命令查看已經構建的鏡像:

  1. docker images 

在查詢結果列表的頂部,是我們新創建的圖像,在最右邊,我們可以看到圖像的大小。目前是 1.43GB。

⑤我們使用以下命令運行鏡像:

  1. docker run --rm -it -p 3000:3000/tcp docker-image-test:latest 

打開瀏覽器并且刷新頁面驗證其可以正常運行。

步驟 3:修改基礎鏡像

①先前的配置中我們用 node:12 作為基礎鏡像。但是傳統的 Node 鏡像是基于 Ubuntu 的,對于我們簡單的 React 應用程序來說這大可不必。

②從 DockerHub(官方 Docker 鏡像注冊表)中我們可以看到,基于 alpine-based 的 Node 鏡像比基于 Ubuntu 的鏡像小得多,而且它們的依賴程度非常低。

③下面顯示了這些基本圖像的大小比較:

現在我們將使用node:12-alpine作為我們的基礎鏡像,看看會發生什么。

  1. FROM node:12-alpine 
  2.  
  3. WORKDIR /app 
  4.  
  5. COPY package.json ./ 
  6.  
  7. RUN yarn install 
  8.  
  9. COPY . . 
  10.  
  11. EXPOSE 3000 
  12.  
  13. CMD ["yarn""start"

然后我們以此構建我們的鏡像,并與之前做對比。

哇!我們的鏡像大小減少到只有 580MB,這是一個很大的進步。但還能做得更好嗎?

步驟 4:多級構建

①在之前的配置中,我們會將所有源代碼也復制到工作目錄中。

②但這大可不必,因為從發布和運行來看我們只需要構建好的運行目錄即可。因此,現在我們將引入多級構建的概念,以減少不必要的代碼和依賴于我們的最終鏡像。

③配置是這樣的:

  1. # STAGE 1 
  2.  
  3. FROM node:12-alpine AS build 
  4.  
  5. WORKDIR /app 
  6.  
  7. COPY package.json ./ 
  8.  
  9. RUN yarn  install 
  10.  
  11. COPY . /app 
  12.  
  13. RUN yarn build 
  14.  
  15.  
  16. # STAGE 2 
  17.  
  18. FROM node:12-alpine 
  19.  
  20. WORKDIR /app 
  21.  
  22. RUN npm install -g webserver.local 
  23.  
  24. COPY --from=build /app/build ./build 
  25.  
  26. EXPOSE 3000 
  27.  
  28. CMD webserver.local -d ./build 

④在第一階段,安裝依賴項并構建我們的項目。

⑤在第二階段,我們復制上一階段構建產物目錄,并使用它來運行應用程序。

⑥這樣我們在最終的鏡像中就不會有不必要的依賴和代碼。

接下來,構建鏡像成功后并從列表中查看鏡像:

現在我們的鏡像大小只有 97.5MB。這簡直太棒了。

步驟 5:使用 Nginx

①我們正在使用 Node 服務器運行 ReactJS 應用程序的靜態資源,但這不是靜態資源運行的最佳選擇。

②我們嘗試使用 Nginx 這類更高效、更輕量級的服務器來運行資源應用程序,也可以盡可能提高其性能,并且減少鏡像的量。

③我們最終的 Docker 配置文件看起來像這樣:

  1. # STAGE 1 
  2.  
  3. FROM node:12-alpine AS build 
  4.  
  5. WORKDIR /app 
  6.  
  7. COPY package.json ./ 
  8.  
  9. RUN yarn  install 
  10.  
  11. COPY . /app 
  12.  
  13. RUN yarn build 
  14.  
  15. # STAGE 2 
  16.  
  17. FROM nginx:stable-alpine 
  18.  
  19. COPY --from=build /app/build /usr/share/nginx/html 
  20.  
  21. EXPOSE 80 
  22.  
  23. CMD ["nginx""-g""daemon off;"

④我們正在改變 Docker 配置的第二階段,以使用 Nginx 來服務我們的應用程序。

⑤然后使用當前配置構建鏡像。

⑥鏡像大小減少到只有 22.4MB!

⑦同時,我們正在使用一個性能更好的服務器來服務我們出色的應用程序。

⑧我們可以使用以下命令驗證應用程序是否仍在工作。

  1. docker run --rm  -it -p 3000:80/tcp docker-image-test:latest 

⑨注意,我們將容器的 80 端口暴露給外部,因為默認情況下,Nginx 將在容器內部的 80 端口上可用。

所以這些是一些簡單的技巧,你可以應用到你的任何 NodeJS 項目,以大幅減少鏡像大小。

現在,您的容器確實更加便攜和高效了。今天就到這里。編碼快樂!

作者:張亞龍譯

編輯:陶家龍

出處:轉載自公眾號分布式實驗室(ID:dockerone)

出處:https://javascript.plainenglish.io/how-i-reduced-docker-image-size-from-1-43-gb-to-22-4-mb-84058d70574b

 

責任編輯:武曉燕 來源: 分布式實驗室
相關推薦

2022-05-02 17:03:32

容器鏡像ReactJS

2021-01-26 09:30:58

Docker運維命令

2017-02-09 17:30:05

Android應用瘦身

2024-10-31 10:41:01

2021-04-27 08:53:37

容器鏡像

2021-05-13 23:54:12

DockerDockerfile鏡像

2020-09-09 15:30:07

5GCPRI接口

2022-09-13 23:49:44

5G6G物聯網

2020-11-27 10:33:06

5G4G網絡

2024-08-12 09:54:00

2012-03-08 21:41:10

App Store

2020-07-13 08:41:25

2G物聯網退網

2022-09-08 11:12:08

6G5G連接技術

2010-08-09 09:00:41

Android

2019-09-27 10:25:39

5G浪潮云計算

2020-04-27 09:42:11

5G6G通信

2024-10-17 09:57:30

2022-03-09 07:21:10

網絡攻擊5G

2021-01-18 05:57:09

5G移動通信無線通話

2022-02-15 16:49:51

移動通信網絡運營商
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线网址 | 成人午夜网 | 国产一区999| 91不卡| 日韩精品无码一区二区三区 | h视频免费在线观看 | 亚洲免费成人 | 日韩精品一区二区三区免费视频 | 欧洲视频一区二区 | 欧美国产激情二区三区 | 国产视频一区二区 | 欧美成人免费在线 | 男女搞网站| 麻豆久久久久久 | 九九热精品在线 | 色综合激情 | 久久久成人网 | 欧美黄色大片在线观看 | 国产亚洲精品久久情网 | 成人激情视频免费在线观看 | 亚洲国产欧美91 | 久草视频在线播放 | 国产精品久久久亚洲 | 成人字幕网zmw | 91精品国产一区二区三区 | 欧洲精品码一区二区三区免费看 | 美女黄网站 | 亚洲视频一区在线 | 日日日日日日bbbbb视频 | 亚洲九九精品 | 性高湖久久久久久久久aaaaa | 欧美一级毛片久久99精品蜜桃 | 99久久婷婷国产综合精品电影 | 成人免费小视频 | 青青草这里只有精品 | h漫在线观看 | 久久精品视频免费看 | 999re5这里只有精品 | 偷拍亚洲色图 | 中国一级特黄真人毛片免费观看 | 黄色片在线看 |