中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么深入分析Docker鏡像原理

發布時間:2021-12-03 17:46:43 來源:億速云 閱讀:149 作者:柒染 欄目:云計算

今天就跟大家聊聊有關怎么深入分析Docker鏡像原理,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1.Docker鏡像的基本知識

1.1 什么是Docker鏡像

從整體的角度來講,一個完整的Docker鏡像可以支撐一個Docker容器的運行,在 Docker容器運行過程中主要提供文件系統視角。例如一個ubuntu:14.04的鏡像,提供了一個基本的ubuntu:14.04的發行版,當然此 鏡像是不包含操作系統Linux內核的。

說到此,可能就需要注意一下,linux內核和ubuntu:14.04Docker鏡像的區別了。傳統虛擬機安裝ubuntu:14.04會包含兩部分,第一,某一個Linux內核的發行版本,比如Linux 3.8版本的內核;第二,第一個特定的Ubuntu發行版,這部分內容不包含Linux內核,但是包含Linux之外的軟件管理方式,軟件驅動,如 apt-get軟件管理包等。

理解以上內容之后,就可以理解,為什么在一個Linux內核版本為3.8的ubuntu:14.04基礎上,可以把Linux內核版本升級到3.18,而ubuntu的版本依然是14.04。最主要的就是:Linux內核版本與ubuntu操作系統發行版之間的區別。

Linux內核+ubuntu操作系統發行版,組成一臺工作的機器讓用戶體驗。那么靈活替換ubuntu操作系統發行版,那是不是也可以實現呢。那么Docker很方便的利用了這一點,技術手段就是Docker鏡像。

Docker的架構中,Docker鏡像就是類似于“ubuntu操作系統發行版”,可 以在任何滿足要求的Linux內核之上運行。簡單一點有“Debian操作系統發行版”Docker鏡像、“Ubuntu操作系統發行版”Docker鏡 像;如果在Debian鏡像中安裝MySQL 5.6,那我們可以將其命名為Mysql:5.6鏡像;如果在Debian鏡像中安裝有Golang 1.3,那我們可以將其命名為golang:1.3鏡像;以此類推,大家可以根據自己安裝的軟件,得到任何自己想要的鏡像。

那么鏡像最后的作用是什么呢?很好理解,回到Linux內核上來運行,通過鏡像來運行時我們常常將提供的環境稱為容器。

以上內容是從宏觀的角度看看Docker鏡像是什么,我們再從微觀的角度進一步深入 Docker鏡像。剛才提到了“Debian鏡像中安裝MySQL 5.6,就成了mysql:5.6鏡像”,其實在此時Docker鏡像的層級概念就體現出來了。底層一個Debian操作系統鏡像,上面疊加一個 mysql層,就完成了一個mysql鏡像的構建。層級概念就不難理解,此時我們一般debian操作系統鏡像稱為mysql鏡像層的父鏡像。

層級管理的方式大大便捷了Docker鏡像的分發與存儲。說到分發,大家自然會聯想到 Docker鏡像的靈活性,傳輸的便捷性,以及高超的移植性。Docker Hub,作為全球的鏡像倉庫,作為Docker生態中的數據倉庫,將全世界的Docker數據匯聚在一起,是Docker生態的命脈。

Docker有兩方面的技術非常重要,第一是Linux 容器方面的技術,第二是Docker鏡像的技術。從技術本身來講,兩者的可復制性很強,不存在絕對的技術難點,然而Docker Hub由于存在大量的數據的原因,導致Docker Hub的可復制性幾乎不存在,這需要一個生態的營造。

1.2 Docker鏡像的內容

大致介紹了Docker鏡像是什么,我們來看看Docker鏡像中有哪些內容?

介紹之前,我先分享一下,我個人在接觸Docker的兩年時間中,對Docker鏡像內容認識的變化。

第一階段:初步接觸Docker。相信很多愛好者都會和我一樣,有這樣一個認識:Docker 鏡像代表一個容器的文件系統內容;

第二階段:初步接觸聯合文件系統。聯合文件系統的概念,讓我意識到鏡像層級管理的技術,每一層鏡像都是容器文件系統內容的一部分。

第三階段:研究鏡像與容器的關系:容器是一個動態的環境,每一層鏡像中的文件屬于靜態內 容,然而 Dockerfile 中的 ENV、VOLUME、CMD 等內容最終都需要落實到容器的運行環境中,而這些內容均不可能直接坐落到每一層鏡像所包含的文件系統內容中,那此時每一個Docker鏡像還會包含 json文件記錄與容器之間的關系。

因此,Docker鏡像的內容主要包含兩個部分:第一,鏡像層文件內容;第二,鏡像json文件。

1.3 Docker鏡像存儲位置

既然是說鏡像存儲的位置,那么應該包含:鏡像層文件和鏡像json文件。如一個ubuntu:14.04鏡像,包含4個鏡像層,在aufs存儲驅動的情況下,在磁盤上的情況可以如以下圖所示:

1.3.1 查看鏡像層組成:

我們可以通過命令 docker history ubuntu:14.04 查看 ubuntu:14.04,結果如下:

1.3.2 鏡像層文件內容存儲

Docker 鏡像層的內容一般在 Docker 根目錄的 aufs 路徑下,為 /var/lib/docker/aufs/diff/,具體情況如下: 

圖中顯示了鏡像 ubuntu:14.04 的 4 個鏡像層內容,以及每個鏡像層內的一級目錄情況。需要額外注意的是:鏡像層 d2a0ecffe6fa 中沒有任何內容,也就是所謂的空鏡像。

1.3.3 鏡像 json 文件存儲

對于每一個鏡像層,Docker 都會保存一份相應的 json 文件,json 文件的存儲路徑為 /var/lib/docker/graph,ubuntu:14.04 所有鏡像層的 json 文件存儲路徑展示如下:

除了 json 文件,大家還看到每一個鏡像層還包含一個 layersize 文件,該文件主要記錄鏡像層內部文件內容的總大小。既然談到了鏡像 json 文件,為了給下文鋪墊,以下貼出 ubuntu:14.04 中空鏡像層 d2a0ecffe6fa 的 json 文件:

看完上述內容,你們對怎么深入分析Docker鏡像原理有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乡城县| 平果县| 正阳县| 京山县| 保康县| 定结县| 海阳市| 柏乡县| 什邡市| 南皮县| 高要市| 灵寿县| 大冶市| 大埔县| 天柱县| 镇远县| 平潭县| 三门县| 临颍县| 平武县| 扶绥县| 罗江县| 平谷区| 油尖旺区| 赞皇县| 行唐县| 塔河县| 汤阴县| 澄江县| 濉溪县| 翼城县| 曲周县| 岳池县| 广宗县| 会同县| 黄大仙区| 博白县| 房产| 新昌县| 旬阳县| 交口县|