日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

网易实战分享|Docker文件系统实战

發布時間:2025/3/8 windows 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易实战分享|Docker文件系统实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文|網易云信資深應用開發工程師


在本文中,我們來實戰構建一個Docker鏡像,然后實例化容器,在Docker的生命周期中詳細分析一下Docker的文件存儲情況和DockerFile優化策略

在開始實戰之前,我們先介紹一個概念,聯合文件系統(Union File System)。聯合文件系統是實現Docker鏡像的技術基礎,支持對文件系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下。鏡像的分層存儲和繼承就是基于此特性實現。

下面是Docker官方的一張描述文件系統的圖片,顯示了一張聯合文件系統在串聯鏡像層和容器層起到的作用:

Docker支持多種聯合文件系統,常見的有aufs,deviceMapper,overlay,overlay2,本文章中使用的系統版本為debian9.1,Docker版本為17.06.2-ce,默認使用是overlay2。

看到這里如果你已經對Docker文件系統有了簡單的概念,那么讓我們開始實戰,來對分層文件系統的存儲方式進行更加深入的了解。

鏡 像 層

這是一個云信私有化項目中基于debian系統鏡像創建的jdk8基礎鏡像,為了方便閱讀和分析,我們Dockerfile進行了一些精簡,只保留核心部分內容:

FROM hub.c.163.com/library/debian:stretch MAINTAINER nim #下載jdk ADD http://10.173.11.100/nim/jdk-8u202-linux-x64.tar.gz /usr/local/nim/ #解壓jdk并刪除 RUN tar -xzvf /usr/local/nim/jdk-8u202-linux-x64.tar.gz -C /usr/local/nim/ && rm /usr/local/nim/jdk-8u202-linux-x64.tar.gz #設置環境變量 ENV JAVA_HOME=/usr/local/nim/jdk1.8.0_202 ENV PATH=$JAVA_HOME/bin:$PATH CMD ["/bin/bash"]

根據構建鏡像,查看構建結果,原基礎鏡像100M,構建后鏡像體積697M。

?鏡像存儲?

現在開始看一下構建鏡像工作在文件層存儲情況。首先我們使用Docker history查看一下剛剛構建鏡像情況,可以看到基礎鏡像占用100M,兩個鏡像分層占用194MB和403M。

接下來我們查看一下文件系統中的存儲情況,本環境使用overlay2,Docker鏡像層存儲默認路徑為/var/lib/Docker/overlay2/,可以看到鏡像存儲目錄下有4個目錄,其中110M的對應是基礎鏡像,另外兩個為ADD JDK(186M)和解壓JDK壓縮包的鏡像分層(389M)。

其中的l目錄包含了所有層的軟連接,軟鏈接使用短名稱,避免mount時候參數達到頁面大小限制。

下面我們了解一下每個分層中的文件內容。基礎鏡像分層包含diff文件夾和link文件,diff文件夾中存放當前分層內容,link文件記錄短名稱。

接下來看一下COPY JDK生成的內容,diff文件夾保存了jdk壓縮包,本層相比基礎鏡像層,多了lower,merged,work三個文件/文件夾,其中lower記錄了此層的下層ID(基礎鏡像層),merged目錄作為提供了統一視圖,在容器層讀寫層被使用,work目錄用于聯合掛載指定的工作目錄,使用過程對用戶不可見。

解壓JDK層的文件夾結構內容和上一層類似,主要關注jdk壓縮包占用空間為0,表示已被刪除。

現在來重點關注一個問題,鏡像大小等于所有分層相加,在后續分層中被刪除的jdk壓縮包仍然要占用存儲空間,這并不是我們原本意圖,因此這里就出現了鏡像文件進行優化的點。優化后的Dockerfile如下:

FROM hub.c.163.com/library/debian:stretch MAINTAINER nim RUN curl -o /usr/local/nim/jdk-8u202-linux-x64.tar.gz http://10.173.11.100/nim/jdk-8u202-linux-x64.tar.gz && tar -xzvf /usr/local/nim/jdk-8u202-linux-x64.tar.gz -C /usr/local/nim/ && rm /usr/local/nim/jdk-8u202-linux-x64.tar.gz && export JAVA_HOME=/usr/local/nim/jdk1.8.0_202 && export PATH=$JAVA_HOME/bin:$PATH CMD ["/bin/bash"]

借這個優化后的內容,我們再談一下構建Docker鏡像時在時間和空間可優化的點:

  • 組合運行語句:合并相同類型構建語句,可以有效減少鏡像分層;

  • 利用鏡像構建緩存:時間同步,基礎軟件安裝等固定內容在鏡像前部分處理,鏡像重新構建時會使用緩存,節省時間;

  • 清理中間產物:注意安裝過程中使用的軟件和壓縮包在一定要同一層里清理,否則仍然會占用鏡像空間;

  • 構建語句優化:比如ADD在處理本地文件時可以直接解壓縮,起到COPY + RUN tar的作用;

  • 優化基礎鏡像源:國內高校和大型IT企業都有創建鏡像站,選擇一個穩定更新及時的鏡像站可以有效縮短構建時間;

  • 舉例的鏡像中優化策略涉及1,3條,用curl替代add,與解壓和刪除合并為一層,Dockerfile減少了層數,清理中間過程的jdk安裝包,下圖是優化后鏡像體積變化:

    構建鏡像真的是層數越少越好嗎?當然不是這么絕對,尤其在早期鏡像版本不是很穩定或是后續迭代比較頻繁時,合理的鏡像分層會減少編譯時間,降低出錯概率,也可以讓Dockerfile更具有可讀性。可以在穩定版本形成之后對鏡像進行二次優化。

    ?鏡像元數據?

    分析一個鏡像元數據我們主要關注三個目錄:

    /var/lib/Docker/image/overlay2/imaged/ /var/lib/Docker/image/overlay2/layerdb/ /var/lib/Docker/overlay2/

    第一個目錄保存鏡像基礎元數據,第二個目錄保存鏡像分層元數據,第三個是上文提到的分層存儲目錄,保存實際分層內容。下面就根據實際情況來看一下,元數據與存儲信息是如何關聯起來的。

    Docker鏡像的基本信息保存在/var/lib/Docker/image/overlay2/imaged/content/sha256/下面,可以根據Docker image ID在此目錄下查找到對應ID開頭文件。此文件中以json的形式保存了該鏡像的分層文件系統、構建信息、相關容器等內容。

    第二個目錄

    /var/lib/Docker/image/overlay2/layerdb/sha256/保存分層元數據,每一個分層元數據目錄下有cache-id,diff,size信息,其中cache-id對應分層存儲層,diff關聯鏡像基礎元數據信息。

    容 器 層

    首先我們來啟動一個容器,掛載宿主機/opt/yunxin目錄到容器/usr/local/yunxin目錄。

    創建容器完成之后,在鏡像存儲目錄/var/lib/Docker/overlay2/會生成容器的初始層和讀寫層,兩者使用相同標識,初始層后面多了-init。初始層中主要保存初始化容器環境時,與容器相關的環境信息,如容器主機名,主機host信息以及域名服務文件等;讀寫層用于容器的讀寫,Docker容器內的進程只對讀寫層擁有寫權限,而對其他層文件內容只擁有讀權限。

    接下來我們進入容器操作進行一系列操作,再根據結果分析一下讀寫層對于文件的保存和處理,下面是操作和對應結果以及讀寫層實際文件存儲情況。

    讀寫層中的merged文件夾提供了統一視圖,面向用戶展示聯合文件系統掛載完成的最終形態。

    接下來我們再基于同一個鏡像啟動幾個容器實例,然后來查詢一下Docker容器使用空間,只有第一個容器由于上面修改文件只占用154k,新啟動的容器并沒有額外占用空間。可見基于同一個鏡像創建容器時,所有的容器共享鏡像層內容,有效節約了空間。讀寫層只保存修改內容,如果是操作鏡像層文件,Docker采用的是修改時復制策略(copy-on-write)。這時回頭再看一下第一節出現的兩張圖,會對Docker的文件系統有了更深的體會。

    結? ? 語

    Docker 鏡像和容器文件系統相關知識在云信私有化產品的鏡像管理和運維存儲管理方面作出理論支撐,但這只是深入了解Docker的開始。

    隨著時間的積淀和云信旗下IM、音視頻、點播以及眾多相關產品私有化工作的深入,更多的模塊和鏡像,更多的客戶和需求,更復雜的網絡和環境都逐漸呈現在我們面前。

    Docker作為構建云信私有化服務的基礎,只有更深入的去了解原理才能在使用中去更好的優化產品和開展運維。希望我們能為用戶提供更可靠的云信私有化服務,也希望能在后續的文章中能與大家分享更多關于Docker的知識。

    點擊閱讀原文,了解網易云信私有云。

    推薦閱讀

    《從入門到進階|如何基于WebRTC搭建一個視頻會議》

    《開源|如何開發一個高性能的redis cluster proxy?》

    總結

    以上是生活随笔為你收集整理的网易实战分享|Docker文件系统实战的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中国老妇性视频 | 欧美激情喷水 | www.在线视频| a爱视频| 欧美调教视频 | 国产精品无码一区 | 国产三级在线免费 | 成人av地址 | 奇米777视频 | 亚洲综合小说 | 成人免费直播 | 国产日韩欧美电影 | 麻豆国产一区二区三区四区 | 女女同性女同一区二区三区九色 | 亚洲黄色短视频 | 久久艹精品视频 | 日韩在线第三页 | 一本久道久久 | av首页在线 | 在线亚洲网站 | 国产精品久久综合视频 | 国产又黄又湿 | 在线一区二区观看 | 亚洲成人一二区 | 粉嫩视频在线观看 | 久久久线视频 10 | a级片视频网站 | 视频久久 | 亚洲欧洲一区二区在线观看 | 理想之城连续剧40集免费播放 | 亚洲精品无码一区二区 | 国产区91| 在线观看黄色大片 | 97精品在线观看 | 看个毛片| 免费黄色在线看 | 农村妇女av | 91精品国产高清一区二区三区蜜臀 | 人人爽人人爽人人片av | 国产黄色片av | 欧美xxxxx性| 黄页免费视频 | 国产精品xxxx | 人人搞人人爱 | 后入内射欧美99二区视频 | 免费看黄色三级三级 | 九一精品国产 | 人妻少妇精品无码专区久久 | 四虎精品在永久在线观看 | 中文在线资源天堂 | 人碰人操 | 久热精品在线观看 | 天天综合天天做 | 小蝌蚪av | 超级变态重口av番号 | 国产精品每日更新 | 91看篇| 日本欧美视频 | 毛片网站免费在线观看 | 国产精品视频一二三区 | 少妇粉嫩小泬喷水视频www | 日本波多野结衣在线 | 少妇又紧又深又湿又爽视频 | 97久久人人 | 久久精品视频一区二区 | babes性欧美69| 欧美特黄一区二区三区 | 国产精品久久久久久久久久久久久久久 | 久久大综合| 国产三级国产精品国产专区50 | 软萌小仙自慰喷白浆 | 国产一区二区在线免费观看视频 | 久久久精品视 | 黄色片久久久久 | 国产毛茸茸 | 高跟肉丝丝袜呻吟啪啪网站av | 国产精品乱码一区二区 | 粉嫩av渣男av蜜乳av | 自拍视频国产 | 日韩美女啪啪 | 国产精品免费精品一区 | 肉色欧美久久久久久久免费看 | 中文日韩欧美 | 国产高清免费 | 中国色老太hd | 精品欧美乱码久久久久久1区2区 | 成人片网址 | 97色综合| 日韩jizz | 涩涩网站在线观看 | 欧洲美女粗暴牲交免费观看 | 人妻在线一区二区 | 国产福利免费观看 | 日本暧暧视频 | 性色欲网站人妻丰满中文久久不卡 | 一区小视频| 精品少妇无码av无码专区 | 成人xx视频 | av永久免费观看 |