一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

重點(diǎn)討論如何優(yōu)化Docker鏡像以使其輕量化

馬哥Linux運(yùn)維 ? 來源:The Agile Crafter ? 2023-02-25 16:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Docker簡介

Docker 是一個(gè)供軟件開發(fā)人員和系統(tǒng)管理員使用容器構(gòu)建、運(yùn)行和與分享應(yīng)用程序的平臺(tái)。容器是在獨(dú)立環(huán)境中運(yùn)行的進(jìn)程,它運(yùn)行在自己的文件系統(tǒng)上,該文件系統(tǒng)是使用 docker 鏡像構(gòu)建的。鏡像中包含運(yùn)行應(yīng)用程序所需的一切(編譯后的代碼、依賴項(xiàng)、庫等等)。鏡像使用 Dockerfile 文件定義。

術(shù)語 dockerization 或 containerization 通常用于定義創(chuàng)建 Docker 容器的過程。

因?yàn)槿萜骶邆淙缦聝?yōu)點(diǎn),所以很受歡迎:

靈活性:即使是最復(fù)雜的應(yīng)用程序也可以容器化。

輕量化:容器共享主機(jī)內(nèi)核,使得它們遠(yuǎn)比虛擬機(jī)高效。

便攜性:可以做到本地編譯,到處運(yùn)行。

耦合:容器自我封裝,一個(gè)容器被替換或升級(jí)不會(huì)打斷別的容器。

安全性:容器對(duì)進(jìn)程進(jìn)行了嚴(yán)格的限制和隔離,而無需用戶進(jìn)行任何配置。

在這篇文章中,我將重點(diǎn)討論如何優(yōu)化 Docker 鏡像以使其輕量化。

優(yōu)化過程

讓我們從一個(gè)示例開始,在該示例中,我們構(gòu)建了一個(gè) React 應(yīng)用程序并將其容器化。

運(yùn)行 npx 命令并創(chuàng)建 Dockerfile 之后,我們得到了下圖所示的文件結(jié)構(gòu)。

npxcreate-react-appapp--templatetypescript

49b81568-b392-11ed-bfe3-dac502259ad0.png

如果我們構(gòu)建一個(gè)基礎(chǔ)的 Dockerfile(如下所示),我們最終會(huì)得到一個(gè) 1.16 GB 的鏡像:

FROMnode:10
WORKDIR/app
COPYapp/app
RUNnpminstall-gwebserver.local
RUNnpminstall&&npmrunbuild
EXPOSE3000
CMDwebserver.local-d./build

49cbd4ea-b392-11ed-bfe3-dac502259ad0.png

第一步優(yōu)化:使用輕量化基礎(chǔ)鏡像

在 Docker Hub(公共 Docker 倉庫)中,有一些鏡像可供下載,每個(gè)鏡像都有不同的特征和大小。

通常,相較于基于其他 Linux 發(fā)行版(例如 Ubuntu)的鏡像,基于 Alpine 或 BusyBox 的鏡像非常小。

這是因?yàn)?Alpine 鏡像和類似的其他鏡像都經(jīng)過了優(yōu)化,其中僅包含最少的必須的軟件包。

在下面的圖片中,你可以看到 Ubuntu、Alpine、Node 和基于 Alpine 的 Node 鏡像之間的大小比較。

49e40650-b392-11ed-bfe3-dac502259ad0.png

通過修改 Dockerfile 并使用 Alpine 作為基礎(chǔ)鏡像,我們的鏡像最終大小為 330MB:

FROMnode:10-alpine
WORKDIR/app
COPYapp/app
RUNnpminstall-gwebserver.local
RUNnpminstall&&npmrunbuild
EXPOSE3000
CMDwebserver.local-d./build

4a188df8-b392-11ed-bfe3-dac502259ad0.png

第二步優(yōu)化:多階段構(gòu)建

通過多階段構(gòu)建,我們可以在 Dockerfile 中使用多個(gè)基礎(chǔ)鏡像,并將編譯成品、配置文件等從一個(gè)階段復(fù)制到另一個(gè)階段,這樣我們就可以丟棄不需要的東西。

在本例中,我們部署 React 應(yīng)用程序需要的是編譯后的代碼,我們不需要源文件,也不需要 node_modules 目錄和 package.json 文件等。

通過將 Dockerfile 修改為如下內(nèi)容,我們最終得到的鏡像大小為 91.5MB。請(qǐng)記住,來自第一階段(第 1-4 行)的鏡像不會(huì)被自動(dòng)刪除,Docker 將它保存在 cache 中,如果我們?cè)诹硪粋€(gè)構(gòu)建鏡像過程中執(zhí)行了相同的階段,就可以使鏡像構(gòu)建更快。所以你必須手動(dòng)刪除第一階段鏡像。

FROMnode:10-alpineASbuild
WORKDIR/app
COPYapp/app
RUNnpminstall&&npmrunbuild
FROMnode:10-alpineWORKDIR/app
RUNnpminstall-gwebserver.local
COPY--from=build/app/build./build
EXPOSE3000
CMDwebserver.local-d./build

4a28ce7a-b392-11ed-bfe3-dac502259ad0.png

現(xiàn)在我們有了一個(gè) Dockerfile,它有兩個(gè)階段:在第一個(gè)階段中,我們編譯項(xiàng)目,在第二個(gè)階段中,我們?cè)?web 服務(wù)器上部署應(yīng)用程序。

然而,Node 容器并不是提供網(wǎng)頁(HTML、CSS 和 JavaScript 文件、圖片等)服務(wù)的最佳選擇,最好的選擇是使用像 Nginx 或 Apache 這樣的服務(wù)。在本例中,我將使用 Nginx。

通過將 Dockerfile 修改為如下內(nèi)容,我們的鏡像最終大小是 22.4MB,如果我們運(yùn)行這個(gè)容器,我們可以看到網(wǎng)頁可以正常工作,沒有任何問題。

FROMnode:10-alpineASbuild
WORKDIR/app
COPYapp/app
RUNnpminstall&&npmrunbuild
FROMnginx:stable-alpine
COPY--from=build/app/build/usr/share/nginx/html
EXPOSE80
CMD["nginx","-g","daemonoff;"]

4a3cc7cc-b392-11ed-bfe3-dac502259ad0.png

4a63688c-b392-11ed-bfe3-dac502259ad0.png






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Ubuntu系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    4273
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    514

    瀏覽量

    12846
  • docker容器
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    3476

原文標(biāo)題:Docker鏡像優(yōu)化:從1.16GB到22.4MB!

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    客車車身輕量化分析

    以某車型為例, 分別從優(yōu)化流程、優(yōu)化分析模型、分析工況等方面研究車身輕量化方法, 提出一套切實(shí)可行的技術(shù)路線。關(guān)鍵詞: 車身; 結(jié)構(gòu); 輕量化; 優(yōu)
    發(fā)表于 07-27 10:09 ?12次下載

    汽車輕量化技術(shù)

    節(jié)能減排已成為世界汽車行業(yè)的共同趨勢(shì)。汽車輕量化是在保證強(qiáng)度和安全性的前提下,盡可能降低汽車整備質(zhì)量,以提高汽車的動(dòng)力性,實(shí)現(xiàn)節(jié)能減排。 2017中國(重慶)國際汽車輕量化及材料展,來自全世界頂級(jí)
    發(fā)表于 05-09 11:57 ?18次下載

    常見的輕量化材料的分類與汽車輕量化材料的應(yīng)用

    主要有三種手段:輕量化結(jié)構(gòu)設(shè)計(jì)及優(yōu)化、先進(jìn)輕量化材料應(yīng)用、先進(jìn)輕量化制造技術(shù)應(yīng)用。采用新型材料是汽車輕量化最直接有效的方法。 汽車的
    發(fā)表于 09-15 16:53 ?6次下載
    常見的<b class='flag-5'>輕量化</b>材料的分類與汽車<b class='flag-5'>輕量化</b>材料的應(yīng)用

    淺析Docker鏡像本地存儲(chǔ)機(jī)制及容器啟動(dòng)原理

    Docker 鏡像不是一個(gè)單一的文件,而是有多層構(gòu)成。我們可通過 docker images 獲取本地的鏡像列表及對(duì)應(yīng)的元信息, 接著可通過dock
    發(fā)表于 10-19 14:17 ?2642次閱讀

    瑞德豐如何實(shí)現(xiàn)動(dòng)力電池輕量化

    陸賓林介紹,瑞德豐通過結(jié)構(gòu)設(shè)計(jì)優(yōu)化、制造工藝創(chuàng)新、材料輕量化三大維度,在保證安全的大前提下來實(shí)現(xiàn)輕量化。
    的頭像 發(fā)表于 12-31 09:10 ?3527次閱讀

    Docker—簡介與鏡像用法

    阿里云官方鏡像站: ??https://developer.aliyun.com/mirror/?utm_content=g_1000303593?? ? 一、容器簡介 Docker是管理容器的引擎
    發(fā)表于 11-25 16:28 ?647次閱讀
    <b class='flag-5'>Docker</b>—簡介與<b class='flag-5'>鏡像</b>用法

    Docker鏡像的詳細(xì)講解

    本文是對(duì) Docker 鏡像的詳細(xì)講解,講解了如何安裝 Docker、配置 Docker 鏡像加速以及操作
    的頭像 發(fā)表于 08-02 10:00 ?2484次閱讀

    docker 搜索鏡像,docker查看鏡像詳細(xì)信息(docker下載鏡像命令)

    Docker Hub是集中管理的Docker鏡像注冊(cè)中心。通過Docker 用戶可以在注冊(cè)中心搜索、下載和使用CLI命令行工具中的鏡像。以下
    的頭像 發(fā)表于 07-19 09:46 ?2214次閱讀

    最新專利深入“輕量化”!華為這樣做?

    具體來看,汽車輕量化的實(shí)現(xiàn)途徑主要有兩方面:一是輕量化材料,使用比強(qiáng)度更高或密度更小的高強(qiáng)度鋼、鋁合金、鎂合金、碳纖維復(fù)合材料,對(duì)傳統(tǒng)普通鋼結(jié)構(gòu)進(jìn)行替代;二是輕量化設(shè)計(jì),通過開發(fā)全新的汽車架構(gòu)實(shí)現(xiàn)
    的頭像 發(fā)表于 08-16 14:41 ?952次閱讀
    最新專利深入“<b class='flag-5'>輕量化</b>”!華為這樣做?

    Docker鏡像國內(nèi)加速的幾種方法

    在國內(nèi),拉取 Docker 鏡像速度慢/時(shí)不時(shí)斷線/無賬號(hào)導(dǎo)致限流等,比較痛苦. 這里提供加速/優(yōu)化的幾種方法。
    的頭像 發(fā)表于 10-19 10:02 ?1.4w次閱讀
    <b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>國內(nèi)加速的幾種方法

    如何在Windows系統(tǒng)上設(shè)置Docker鏡像

    在使用 Docker 進(jìn)行鏡像下載和構(gòu)建時(shí),由于眾所周知的原因,國內(nèi)用戶可能會(huì)遇到下載速度慢或者無法連接的問題。為了解決這個(gè)問題,我們可以使用國內(nèi)的鏡像源來加速下載速度。本文將介紹如何
    的頭像 發(fā)表于 10-24 16:55 ?7122次閱讀

    構(gòu)建docker鏡像應(yīng)該遵循哪些原則

    構(gòu)建 Docker 鏡像時(shí),應(yīng)遵循以下原則: 單一職責(zé):每個(gè)鏡像應(yīng)只包含一個(gè)應(yīng)用或服務(wù),避免將多個(gè)應(yīng)用或服務(wù)放在同一個(gè)鏡像中。這樣可以確保鏡像
    的頭像 發(fā)表于 11-23 09:41 ?1346次閱讀

    手動(dòng)構(gòu)建Docker鏡像的方法

    不推薦使用docker commit命令,而應(yīng)該使用更靈活、更強(qiáng)大的dockerfile來構(gòu)建docker鏡像
    的頭像 發(fā)表于 08-05 15:30 ?863次閱讀
    手動(dòng)構(gòu)建<b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>的方法

    Docker-鏡像的分層-busybox鏡像制作

    目錄 知識(shí)點(diǎn)1:鏡像的分層 示例:進(jìn)入 docker hub查看Jenkins的Dockerfile 知識(shí)點(diǎn)2:base鏡像 知識(shí)點(diǎn)3:scratch鏡像 scratch
    的頭像 發(fā)表于 01-15 10:44 ?577次閱讀
    <b class='flag-5'>Docker</b>-<b class='flag-5'>鏡像</b>的分層-busybox<b class='flag-5'>鏡像</b>制作

    基于Docker鏡像逆向生成Dockerfile

    在本文中, 我們將通過理解Docker鏡像如何存儲(chǔ)數(shù)據(jù), 以及如何使用工具查看鏡像方方面面的信息來逆向工程一個(gè)Docker鏡像; 以及如何使
    的頭像 發(fā)表于 03-10 09:45 ?530次閱讀
    基于<b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>逆向生成Dockerfile