国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

優(yōu)化 Docker 鏡像大小常見方法

開發(fā) 前端
平時我們構(gòu)建的 Docker 鏡像通常比較大,占用大量的磁盤空間,隨著容器的大規(guī)模部署,同樣也會浪費(fèi)寶貴的帶寬資源。本文將介紹幾種常用的方法來優(yōu)化 Docker 鏡像大小,這里我們使用 Docker Hub 官方上的 Redis 鏡像進(jìn)行說明。

  平時我們構(gòu)建的 Docker 鏡像通常比較大,占用大量的磁盤空間,隨著容器的大規(guī)模部署,同樣也會浪費(fèi)寶貴的帶寬資源。本文將介紹幾種常用的方法來優(yōu)化 Docker 鏡像大小,這里我們使用 Docker Hub 官方上的 Redis 鏡像進(jìn)行說明。

[[338893]]

手動管理

我們能夠直接想到的方法就是直接修改官方的 Redis 鏡像 Dockerfile 文件,手動刪除容器運(yùn)行后不需要的組件,然后重新構(gòu)建一個新鏡像。這種方法理論上是可行的,但是容易出錯,而且效果也不是特別明顯。主要是不能和官方的鏡像實時同步。

多階段構(gòu)建

Docker 在17.05 版本起提供了多階段構(gòu)建的功能來解決這個問題,這種方法是通過丟棄中間層來實現(xiàn)的,并通過中間層來提供有關(guān)如何創(chuàng)建最終鏡像及其內(nèi)容信息來完成的,只需要保留容器化應(yīng)用所需的組件即可。在更上層的實現(xiàn)如下所示:

  • 以一些鏡像作為構(gòu)建的基礎(chǔ)
  • 和平常一樣運(yùn)行命令來構(gòu)造你的應(yīng)用
  • 將所需的制品復(fù)制到另外一個單獨(dú)的鏡像

Distroless

在嚴(yán)重依賴容器化技術(shù),尤其是 Docker 之后,谷歌早就意識到了使用臃腫鏡像的弊端。所以他們提供了自己的方法來解決這個問題,即 distroless 鏡像。與典型的Linux 基礎(chǔ)鏡像(綁定了很多軟件)不同,在 distroless 上對你的應(yīng)用進(jìn)行 docker化,最終的鏡像只包含應(yīng)用及其運(yùn)行時的依賴項,大多數(shù) Linux 發(fā)行版中包含的標(biāo)準(zhǔn)軟件,如包管理器,甚至 shell 都被會被排除在外。同樣的,要使用 Google 的 distroless 鏡像,需要使用上面我們提到的多階段構(gòu)建,如下所示:

 

  1. FROM redis:latest AS build 
  2. ARG TIME_ZONE 
  3. RUN mkdir -p /opt/etc && \ 
  4.     cp -a --parents /lib/x86_64-linux-gnu/libm.so.* /opt && \ 
  5.     cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \ 
  6.     cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \ 
  7.     cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \ 
  8.     cp -a --parents /usr/local/bin/redis-server /opt && \ 
  9.     cp -a --parents /usr/local/bin/redis-sentinel /opt && \ 
  10.     cp /usr/share/zoneinfo/${TIME_ZONE:-UTC} /opt/etc/localtime 
  11.     
  12. FROM gcr.io/distroless/base 
  13. COPY --from=build /opt / 
  14. VOLUME /data 
  15. WORKDIR /data 
  16. ENTRYPOINT ["redis-server"

使用redis:latest為基礎(chǔ)鏡像,然后保留需要的一些二進(jìn)制文件(redis-server二進(jìn)制文件以及所有的相關(guān)依賴),然后使用 distroless 鏡像作為構(gòu)建的最終鏡像的基礎(chǔ),將opt目錄內(nèi)容復(fù)制到該鏡像目錄中來。

然后我們只需要重新構(gòu)建鏡像即可:

 

  1. $ docker build -t redis:distroless .$ docker imagesREPOSITORY        TAG                 IMAGE ID                   CREATED             SIZEredis                        distroless     7d50bd873bea        15 seconds ago      28.2MBredis                        latest              1319b1eaa0b7        3 days ago          104MB 

我們可以看到鏡像由以前的 104MB 變成了 28.2MB,大大降低了鏡像的大小。

注意:在 Linux 下面我們可以使用 ldd 工具來查找指定的二進(jìn)制文件所需要的依賴,比如 $ ldd $(which redis-server) 。

使用 distroless 鏡像來降低 Docker 鏡像的大小是一個非常有效的方法,但是這樣做也有一個明顯的缺點就是最終的鏡像中沒有 shell 程序了,使得調(diào)試 Docker 容器就非常非常困難,當(dāng)然這樣也降低了應(yīng)用被攻擊的危險,使其更加安全,如果我們將應(yīng)用部署到 Kubernetes 集群的話,我們可以利用 kubectl-debug這樣的工具來輔助調(diào)試應(yīng)用。

Alpine Linux

另外一種比較常見的方式是選擇在 Alpine Linux 基礎(chǔ)上構(gòu)建應(yīng)用鏡像,Alpine Linux 是一個特別適合創(chuàng)建最小化 Docker 鏡像的發(fā)行版。Apline Linux 使用較小的 musl C 庫代替 glibc,并將其靜態(tài)鏈接,這意味著針對 musl 編譯的程序?qū)⒆兂煽芍囟ㄎ坏? (relocatable)的二進(jìn)制文件,從而無需包含共享對象,從而可以顯著降低鏡像的大小。

redis:alpine 鏡像大概為 30MB 左右,這樣做的缺點是,通常 musl 的性能不如 glibc。當(dāng)然也有另外一個好處,那就是和上面的 distroless 相比,Alpine 是成熟的 Linux 發(fā)行版,提供基本的 shell 訪問,使得調(diào)試 Docker 容器應(yīng)用更為方便。在 Docker Hub 上面也可以找到幾乎所有流行軟件的 Alpine 版本,比如 Redis、Nginx、MySQL 等等。

GNU Guix

最后,我們可以使用 GNU Guix,一個多功能的軟件包管理工具,其中就有一項可以創(chuàng)建 Docker 鏡像的功能。Guix 區(qū)分了包的運(yùn)行時依賴與構(gòu)建依賴,所以 Guix 構(gòu)建的 Docker 鏡像將只包含明確指定的程序,加上他們的運(yùn)行時依賴,就像 distroless 的方法一樣。但和 distroless 不同的時候,distroless 需要你自己去查程序的運(yùn)行時依賴關(guān)系(當(dāng)然也要寫 Dockerfile),而 Guix 只需要運(yùn)行一條命令即可:$ guix pack -f docker redis 。

通過上面的命令創(chuàng)建的 Redis 鏡像大小約為 70MB,和原本的鏡像相比有明顯的減少,雖然比 distroless 和 Alpine 方法創(chuàng)建的鏡像稍大,但使用 Guinx 確實提供了一些其他的優(yōu)點。比如,如果你想讓你的最終鏡像也包含一個 shell,以便像 Alpine 那樣去調(diào)試,那么只需要在 Guxi 打包的時候指定上就可以了:$ guix pack -f docker redis bash ,如果你想包含其他軟件,也可以繼續(xù)在后面添加即可。

Guix 的功能特性意味著包的構(gòu)建可以100%復(fù)用,所以我們可以在 CI/CD 流水線管道中加入 Guix 支持,這樣構(gòu)建過程就非常順暢了。

有的人可能會覺得 Guix 聽起來很酷,但是并不想為了構(gòu)建更小的 Docker 鏡像而去下載安裝另外一個工具,更何況 Guix 只在 Linux 下面工作,很多開發(fā)者還是 MacOS 用戶,去配置 Guix 也挺麻煩。其實這點并不用擔(dān)心,Guix 本身也有 Docker 鏡像在 Docker Hub 上,所以使用起來也并不會太復(fù)雜,只需要簡單的使用 $ docker run guix 命令即可。

除了 Guix 之外,值得一提的還有一個名為 Nix 的軟件包管理工具,對 Guix 所述的每一點都同樣有效并且適用于 Nix。

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

2022-01-04 06:50:12

數(shù)據(jù)摘要方法

2010-01-14 16:48:29

交換機(jī)故障

2020-06-09 08:11:33

MESI協(xié)議MM

2010-08-16 16:49:30

DIV CSS居中

2019-09-02 15:33:23

AI換臉人臉轉(zhuǎn)換深度學(xué)習(xí)

2010-09-08 12:54:42

2010-09-07 09:33:20

2015-08-13 13:47:17

2010-07-29 10:22:38

2024-04-16 11:46:51

C#Redis數(shù)據(jù)庫

2025-10-21 02:00:00

2010-01-12 09:37:48

VB.NET調(diào)用IE

2009-12-04 12:31:24

2024-11-07 11:17:50

2010-08-18 09:24:09

IE6兼容性

2020-03-19 10:44:19

DockerSpring Boo單層鏡像

2021-01-14 16:14:06

Python爬蟲代碼

2024-01-15 08:59:31

Docker優(yōu)化

2009-12-16 08:57:45

2018-11-07 09:01:13

Tomcat部署方式
點贊
收藏

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

欧美va在线播放| 一本岛在线视频| 欧美亚洲国产精品久久| 成人精品在线视频| 久久久精品五月天| 久久久国产欧美| 欧美日韩成人综合在线一区二区| 日本免费久久| 亚洲444eee在线观看| 亚洲区成人777777精品| 日韩一级不卡| 在线免费观看成人网| 麻豆久久久久久久| www.欧美日本| 久久99日本精品| 手机看片福利永久国产日韩| 精品一区二区av| 国产精品97在线| 国产精品丝袜在线| 久操手机在线视频| 91美女福利视频| 国产精品美女午夜av| 欧美成人ⅴideosxxxxx| 99国产精品99久久久久久| 日韩一级黄色av| 国产精品99在线观看| 在线看三级网站视频| 成人激情视频网| 成人午夜av电影| 成人动漫在线视频| 99久久婷婷国产综合精品青牛牛| 欧美特级www| 91福利入口| 日韩精品2区| 在线激情影院一区| 日日噜噜噜夜夜爽爽狠狠| 香蕉av一区二区| 色综合色综合网色综合| 国产a亚洲精品| 日韩在线欧美在线国产在线| 亚洲女色av| 亚洲一区二区五区| jizz蜜桃视频在线观看| 中文字幕av一区 二区| 强开小嫩苞一区二区三区网站| 国产精品综合色区在线观看| 亚洲美女视频网站| avav在线播放| 国产精品久久久久久久久久久久久久久 | 日韩av综合中文字幕| 国产成人免费观看| 成人动漫在线播放| 一区二区三区四区av| 国产一线二线三线在线观看| 久久综合久久99| 最近2018年手机中文在线| 精品福利在线导航| 国产成人a亚洲精品| 精品资源在线看| 久久久成人的性感天堂| 国产精品69毛片高清亚洲| 国产黄色片在线观看| 欧美另类极品videosbest最新版本 | 五月激情久久久| 日韩欧美在线免费观看视频| 欧美午夜精品理论片a级按摩| 日本综合视频| 91超碰caoporn97人人| 99国产精品| 成人免费视频77777| 精品国产欧美| 欧美激情一区二区三区在线视频| 99久久久免费精品国产一区二区| 牛夜精品久久久久久久| 亚洲男人天堂视频| 精品一区亚洲| 久久99久久精品国产| 韩国v欧美v日本v亚洲v| 亚洲精品一区二区在线| 午夜精品影院| 欧美成人免费一级人片100| 黄色免费在线看| 国产91色在线免费| 99久久精品一区| 中文字幕日韩一区二区三区不卡| 久久久久久色| 亚洲一区三区| 欧美91视频| 天堂精品一区二区三区| 国产69精品久久99不卡| 波多野结衣家庭教师视频| 久久99精品国产麻豆婷婷| 国产精品88久久久久久妇女| 一本久道综合久久精品| 成人伊人精品色xxxx视频| 日韩综合av| 精品麻豆av| 久久国产夜色精品鲁鲁99| 91日本在线观看| 国产一区国产二区国产三区| 日韩视频欧美视频| 成人久久网站| 久久av在线看| 88xx成人免费观看视频库| 欧美影院午夜播放| 肉体视频在线| 精品久久久久久久久久久久久久久久久 | 国产情侣久久| 日韩av电影免费| 国产美女主播一区| 最新国产精品拍自在线播放| 久久人人99| 国产免费一区二区| 久久久久久久久久久99999| 日本韩国欧美在线观看| 色狠狠综合天天综合综合| 在线成人av| se69色成人网wwwsex| 69日本xxxxxxxxx49| 日韩在线观看免费网站| 中文字幕一区二区三区日韩精品| 国产91精品高潮白浆喷水| 欧美日韩经典丝袜| 97久久人人超碰caoprom欧美| 亚洲成人动漫在线观看| 香蕉国产精品| 99久久亚洲国产日韩美女| av在线电影网| 成人毛片免费在线观看| 久久精品国产第一区二区三区最新章节| 欧美mv日韩mv亚洲| 色综合久久中文字幕| 色激情天天射综合网| 欧美日韩精品电影| 日韩高清有码在线| 亚洲视频第一页| 欧美老女人xx| 国产精品久久久久久av下载红粉| 成人久久久久爱| 国产精品美女黄网| 熟女视频一区二区三区| 国产精品www在线观看| 喜爱夜蒲2在线| 一二三四在线视频观看社区| 青青草免费观看免费视频在线| 久久久精品动漫| 91偷拍精品一区二区三区| 欧美一级大胆视频| 国产精品自拍视频| 电影午夜精品一区二区三区 | 亚洲自拍高清视频网站| 欧美在线xxx| 97在线观看视频国产| 国内久久久精品| 欧洲一区二区视频| 99在线视频播放| 亚洲一区二区三区在线免费观看| 久久久久久久爱| 精品亚洲一区二区三区在线播放| 精品动漫一区二区| 亚洲欧美视频一区| 97超碰欧美中文字幕| 亚洲少妇中出一区| www日韩欧美| 免费看的黄色大片| 粉嫩精品导航导航| 99re6热只有精品免费观看| xxxx69视频| 亚洲精选av在线| 九色在线播放| 日韩伦理福利| xxxx日韩| 亚洲一区色图| 欧美理论在线播放| 免费超碰在线| 久久超碰亚洲| 欧美高清自拍一区| 777精品视频| 久久成人av网站| 国产精品女同互慰在线看| 亚洲国产第一| 欧美区一区二| a一区二区三区亚洲| 在线免费观看黄| 欧美日韩在线成人| 日产精品久久久久久久蜜臀| 伊人久久青草| 东北一级毛片| 成人1区2区| 欧美a一区二区| 日韩欧美主播在线| 国产精品第100页| 一区二区三区在线播| 蜜桃精品一区二区三区| 精品9999| 色呦呦国产精品| 国产精品视频一区二区三区四| 伊人精品久久久久7777| 午夜成年人在线免费视频| 欧美日韩天堂|