最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker鏡像分層的實現(xiàn)示例

 更新時間:2023年08月04日 11:04:30   作者:哈密猿  
本文主要介紹了Docker鏡像分層的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

docker鏡像分層

Docker 鏡像由一些松耦合(關(guān)系不怎么緊密)的只讀鏡像層組成,Docker Daemon 負(fù)責(zé)堆疊這些鏡像層,并將它們關(guān)聯(lián)為一個統(tǒng)一的整體,即對外表現(xiàn)出的是一個獨立的對象。

介紹

Docker 鏡像采用分層結(jié)構(gòu)來構(gòu)建和管理,這是其輕量、高效和可復(fù)用性的關(guān)鍵。鏡像的分層結(jié)構(gòu)使得 Docker 鏡像在構(gòu)建、部署和更新過程中非常靈活,同時節(jié)省存儲空間和下載時間。下面是 Docker 鏡像分層的詳細介紹:

只讀分層:

Docker 鏡像由多個只讀的文件系統(tǒng)層組成,每個分層包含了一個或多個文件或目錄的更改。這些分層按照從底部到頂部的順序疊加在一起,形成了一個完整的鏡像。底部的分層通常是一個基礎(chǔ)操作系統(tǒng)的根文件系統(tǒng),而頂部的分層包含了應(yīng)用程序代碼和配置等信息。由于每個分層是只讀的,所以鏡像在創(chuàng)建后不會被更改。

聯(lián)合文件系統(tǒng):

Docker 使用聯(lián)合文件系統(tǒng)(UnionFS)技術(shù)將多個只讀分層組合成一個單一的虛擬文件系統(tǒng)。聯(lián)合文件系統(tǒng)使得各個分層看起來像是一個整體,使得鏡像中的每個分層的內(nèi)容在文件系統(tǒng)層次結(jié)構(gòu)中可見,但實際上并不復(fù)制這些內(nèi)容。這樣的設(shè)計節(jié)省了存儲空間,并且可以在不同的鏡像之間共享公共層,從而加快鏡像的構(gòu)建和下載速度。

分層繼承:

Docker 鏡像支持分層繼承,這意味著可以基于現(xiàn)有的鏡像構(gòu)建新的鏡像。當(dāng)新的鏡像構(gòu)建時,它只需在現(xiàn)有鏡像的基礎(chǔ)上添加新的分層,而不需要重新復(fù)制現(xiàn)有的分層。這種分層繼承的特性使得鏡像構(gòu)建變得高效和快速,并允許鏡像的復(fù)用。

可讀寫容器層:

當(dāng)基于鏡像創(chuàng)建一個容器時,Docker 會在鏡像的頂部添加一個可讀寫的容器層。這個容器層允許容器在運行時對文件系統(tǒng)進行寫操作,例如應(yīng)用程序的日志輸出、數(shù)據(jù)庫文件等。容器層是臨時的,只在容器運行時存在,當(dāng)容器停止時,對容器層的修改也會被丟棄,保持鏡像的不可變性。

鏡像的復(fù)用和共享:

Docker 鏡像分層的結(jié)構(gòu)使得鏡像可以復(fù)用和共享。多個鏡像可以共享相同的基礎(chǔ)層,從而節(jié)省存儲空間,并減少鏡像拉取和構(gòu)建的時間。這對于持續(xù)集成、持續(xù)部署和分布式系統(tǒng)的部署非常有益。

總結(jié)來說,Docker 鏡像的分層結(jié)構(gòu)是一種高效、靈活和可復(fù)用的設(shè)計,它使得 Docker 容器化應(yīng)用程序在不同的環(huán)境中可以輕松部署和運行,同時節(jié)省了存儲空間和提高了構(gòu)建和下載速度。這種設(shè)計也促進了 Docker 生態(tài)系統(tǒng)的發(fā)展和鏡像的共享,使得 Docker 成為一種廣泛使用的容器化技術(shù)。

例子

通過 docker pull 命令拉取指定的鏡像時,每個 Pull complete 結(jié)尾的行就代表下載完畢了一個鏡像層。

[root@docker ~]# docker pull nginx 
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Already exists 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

有些版本不一樣,但是他們的鏡像分層有些是一樣的。即不同鏡像對相同下層

鏡像的復(fù)用

[root@docker ~]# docker pull zookeeper:3.7.1-temurin
3.7.1-temurin: Pulling from library/zookeeper
9d19ee268e0d: Already exists 
32db0ad82863: Already exists 
e01bb55fbcae: Already exists 
297c6e3f57ee: Already exists 
49c4f235b5f6: Already exists 
82b2637e3748: Already exists 

鏡像層構(gòu)成

Docker 鏡像是由一系列只讀的文件系統(tǒng)層構(gòu)成的,這些層會按特定順序疊加在一起,構(gòu)成一個完整的鏡像。鏡像層的設(shè)計使得 Docker 具有輕量、高效和可復(fù)用的特性。下面是 Docker 鏡像層構(gòu)成的詳細介紹:

基礎(chǔ)鏡像層:
Docker 鏡像的第一層是基礎(chǔ)鏡像層,它通常包含一個最小化的操作系統(tǒng),如Alpine Linux、Ubuntu、CentOS等。這個基礎(chǔ)鏡像提供了運行應(yīng)用程序所需的最基本的文件和工具?;A(chǔ)鏡像通常是公共或私有的,供其他鏡像構(gòu)建和擴展使用。

應(yīng)用程序依賴層:
在基礎(chǔ)鏡像之上,Docker 可以添加應(yīng)用程序的依賴項和運行時環(huán)境,這些依賴項可能包括軟件包、庫文件等。這些層用于支持應(yīng)用程序的執(zhí)行和運行所需的軟件和工具。

應(yīng)用程序代碼層:
在依賴層之上,Docker 可以添加應(yīng)用程序的實際代碼和資源文件。這些層包含了應(yīng)用程序的源代碼、配置文件、靜態(tài)資源等。這使得 Docker 鏡像能夠完整地包含應(yīng)用程序的所有代碼。

只讀層:
鏡像的每個層都是只讀的,這意味著在構(gòu)建后,鏡像層的內(nèi)容不會再改變。這種設(shè)計有助于鏡像的高效性和可復(fù)用性。如果需要修改鏡像,Docker 將在現(xiàn)有層之上創(chuàng)建新的鏡像層,保持原有層的完整性。

共享相同層:
當(dāng)多個鏡像共享相同的基礎(chǔ)層時,它們可以節(jié)省存儲空間和下載時間。因為這些鏡像只需在自己的特定層上添加差異層,而不是復(fù)制整個基礎(chǔ)鏡像。這使得鏡像的存儲和傳輸變得更加高效。

鏡像的唯一標(biāo)識:
每個鏡像都有一個唯一的標(biāo)識符,稱為鏡像 ID,它是根據(jù)鏡像內(nèi)容生成的哈希值。鏡像 ID 是根據(jù)所有鏡像層的內(nèi)容計算得出的,即使一個鏡像只有一個小的改動,它的鏡像 ID 也會發(fā)生變化。這種特性有助于確保鏡像的唯一性和數(shù)據(jù)的完整性。

每個鏡像層由兩部分構(gòu)成:鏡像文件系統(tǒng)與鏡像 json 文件。這兩部分具有相同的 ImageID。鏡像文件系統(tǒng)就是對鏡像占有的磁盤空間進行管理的文件系統(tǒng),擁有該鏡像所有鏡像層的數(shù)據(jù)內(nèi)容。而鏡像 json 文件則是用于描述鏡像的相關(guān)屬性的集合,通過 docker inspect [鏡像]就可以直觀看到。

鏡像FS 構(gòu)成

Docker 鏡像的 FS(文件系統(tǒng))構(gòu)成是指鏡像是如何由多個只讀文件系統(tǒng)層疊加在一起的。鏡像的 FS 構(gòu)成具有聯(lián)合文件系統(tǒng)(UnionFS)的特點,這使得 Docker 鏡像可以共享和重用底層層,并且能夠快速高效地創(chuàng)建新的鏡像。

下面是 Docker 鏡像 FS 構(gòu)成的詳細介紹:

分層結(jié)構(gòu):
Docker 鏡像由多個文件系統(tǒng)層組成,每個層包含一個或多個文件或目錄的更改。每一層都是只讀的,并且在創(chuàng)建后不會被更改。這種分層結(jié)構(gòu)是 Docker 鏡像的核心特點之一,它使得鏡像非常輕量且可共享。

鏡像層:
每個 Docker 鏡像都由一個或多個鏡像層組成,這些層會按照特定的順序堆疊在一起。每個鏡像層都包含在上一個層基礎(chǔ)上的變更。這種分層結(jié)構(gòu)使得容器鏡像的構(gòu)建和分發(fā)變得高效,因為每個層都可以獨立地下載和使用。

Copy-on-Write:
Docker 使用了聯(lián)合文件系統(tǒng)的技術(shù)來實現(xiàn)鏡像的分層和構(gòu)成。這包括 Copy-on-Write(寫時復(fù)制)的特性。當(dāng)容器需要修改一個層中的文件時,Docker 不會直接修改原始層,而是創(chuàng)建一個新的層,并在新層中存儲修改后的文件。這樣,只有發(fā)生更改的文件會在新層中存在,而其他文件仍然鏈接到原始層,節(jié)省了存儲空間。

鏡像的繼承:
Docker 鏡像的分層結(jié)構(gòu)使得鏡像可以基于現(xiàn)有鏡像創(chuàng)建。例如,如果你有一個基礎(chǔ)鏡像,并在其上添加了一些修改,Docker 只需創(chuàng)建一個新的層,其中包含這些修改,而不需要復(fù)制整個基礎(chǔ)鏡像。這使得容器鏡像的構(gòu)建非常高效,并允許鏡像的復(fù)用。

存儲驅(qū)動:
Docker 支持多種存儲驅(qū)動來管理鏡像的 FS 構(gòu)成。常見的存儲驅(qū)動有 OverlayFS、AUFS、Btrfs、DeviceMapper 等。不同的存儲驅(qū)動可能在性能和特性上有所不同,你可以根據(jù)需求選擇適合你的存儲驅(qū)動。

一個 docker 鏡像的文件系統(tǒng) FS 由多層只讀的鏡像層組成,每層都完成了特定的功能。而這些只讀鏡像層根據(jù)其位置與功能的不同可分為兩類:基礎(chǔ)鏡像層與擴展鏡像層。

基礎(chǔ)鏡像層

Docker 的基礎(chǔ)鏡像層是構(gòu)成 Docker 鏡像的核心組成部分之一。Docker 鏡像是由多個只讀的文件系統(tǒng)層疊加在一起構(gòu)成的,基礎(chǔ)鏡像層是這些層中的第一層。下面是基礎(chǔ)鏡像層的詳細介紹:

只讀的文件系統(tǒng)層:
基礎(chǔ)鏡像層是一個只讀的文件系統(tǒng)層,意味著一旦創(chuàng)建,就不能對其進行更改。所有對基礎(chǔ)鏡像的更改都將作為上面的一系列可讀寫的鏡像層添加。這種分層的結(jié)構(gòu)是 Docker 鏡像輕量且高效的關(guān)鍵所在。

Dockerfile 中的 FROM 指令:
基礎(chǔ)鏡像是通過 Dockerfile 文件中的 FROM 指令來指定的。FROM 指令定義了基于哪個現(xiàn)有鏡像構(gòu)建新鏡像。Docker 在構(gòu)建鏡像時,會在指定的基礎(chǔ)鏡像之上創(chuàng)建新的只讀層,然后在其上添加其他層。

操作系統(tǒng)和軟件環(huán)境:
基礎(chǔ)鏡像通常包含操作系統(tǒng)(如 Ubuntu、Alpine、CentOS 等)以及一些最基本的軟件工具和運行時庫。這些軟件環(huán)境為后續(xù)的鏡像層提供了一個穩(wěn)定的運行基礎(chǔ)。

特定用途的基礎(chǔ)鏡像:
Docker 官方鏡像倉庫和其他可信的鏡像倉庫通常提供了許多特定用途的基礎(chǔ)鏡像,如數(shù)據(jù)庫鏡像、Web 服務(wù)器鏡像、編程語言運行時環(huán)境鏡像等。這些基礎(chǔ)鏡像已經(jīng)配置好了特定的軟件和環(huán)境,使得用戶可以基于它們構(gòu)建和部署特定類型的應(yīng)用程序。

鏡像緩存:
Docker 鏡像構(gòu)建過程中,如果使用的基礎(chǔ)鏡像已經(jīng)存在于本地主機上,則 Docker 將從本地緩存中直接使用該鏡像,而不是重新下載或構(gòu)建。這樣可以節(jié)省時間和網(wǎng)絡(luò)帶寬。

基礎(chǔ)鏡像的選擇對于 Docker 鏡像的大小、性能、安全性和可維護性都有重要影響。因此,在選擇基礎(chǔ)鏡像時,需要考慮以下幾點:

  • 選擇官方或經(jīng)過驗證的發(fā)布者提供的鏡像,以確保鏡像的質(zhì)量和安全性。
  • 盡量選擇小巧、輕量級的基礎(chǔ)鏡像,以減小鏡像的大小。
  • 確?;A(chǔ)鏡像提供了適合你應(yīng)用程序的運行環(huán)境和所需的依賴項。

所有鏡像的最下層都具有一個可以看得到的基礎(chǔ)鏡像層 Base Image,基礎(chǔ)鏡像層的文件系統(tǒng)稱為根文件系統(tǒng) rootfs。而 rootfs 則是建立在 Linux 系統(tǒng)中**“看不到的”引導(dǎo)文件系統(tǒng)bootfs 之上。

擴展鏡像層

在 Docker 中,“擴展鏡像層” 是指在一個現(xiàn)有的基礎(chǔ)鏡像上構(gòu)建新的鏡像層,以添加或修改容器所需的內(nèi)容和配置。Docker 使用分層文件系統(tǒng)的方式來管理鏡像,每個鏡像層都包含一個或多個文件或目錄的更改。當(dāng)你在現(xiàn)有的鏡像上進行更改時,Docker 會在原有的鏡像層之上創(chuàng)建一個新的鏡像層,這個過程就是所謂的 “擴展鏡像層”。

下面是擴展鏡像層的詳細介紹:

基礎(chǔ)鏡像:
擴展鏡像層的起點是一個現(xiàn)有的基礎(chǔ)鏡像?;A(chǔ)鏡像通常是一個已經(jīng)構(gòu)建好的、可用于部署特定應(yīng)用程序的鏡像。這個基礎(chǔ)鏡像可以是 Docker 官方鏡像、第三方鏡像或者你自己構(gòu)建的鏡像。

創(chuàng)建 Dockerfile:
擴展鏡像層的過程通常是通過創(chuàng)建一個 Dockerfile 文件來完成的。Dockerfile 是一個文本文件,其中包含一系列的指令,用于定義新鏡像的構(gòu)建過程。Dockerfile 可以基于已有的基礎(chǔ)鏡像,然后在其上添加更改,以滿足特定的需求。

添加新的鏡像層:
Docker 會根據(jù) Dockerfile 中的指令逐步構(gòu)建新的鏡像。當(dāng) Docker 構(gòu)建過程遇到一個指令時,它會在當(dāng)前鏡像層的基礎(chǔ)上創(chuàng)建一個新的鏡像層,并應(yīng)用該指令所描述的更改。這樣,新的鏡像層就被添加到了構(gòu)建過程中。

緩存機制:
Docker 在構(gòu)建過程中使用了緩存機制,這意味著當(dāng)一個指令沒有發(fā)生變化時,Docker 將重用之前構(gòu)建的層,而不會重新創(chuàng)建。這樣可以提高構(gòu)建的速度和效率。

多層繼承:
在 Dockerfile 中,你可以利用多層繼承的特性,基于多個基礎(chǔ)鏡像構(gòu)建一個新的鏡像。這使得擴展鏡像層的過程更加靈活,可以根據(jù)實際需求選擇不同的基礎(chǔ)鏡像,并在其上添加所需的更改。

不可變性:
鏡像層是不可變的,一旦創(chuàng)建后就不會更改。這意味著每次在擴展鏡像層上做出的更改都會創(chuàng)建一個新的鏡像層,而原有的鏡像層保持不變。這有助于確保鏡像的穩(wěn)定性和可重現(xiàn)性。

在基礎(chǔ)鏡像層之上的鏡像層稱為擴展鏡像層。顧名思義,其是對基礎(chǔ)鏡像層功能的擴展。在 Dockerfile 中,每條指令都是用于完成某項特定功能的,而每條指令都會生成一個擴展鏡像層。

容器層

Docker 的容器層是 Docker 容器的一個核心概念,它是 Docker 鏡像的運行實例。當(dāng)你從 Docker 鏡像創(chuàng)建一個容器時,Docker 在鏡像的基礎(chǔ)上添加了一個可寫的容器層,用于存儲容器運行時的變更和數(shù)據(jù)。容器層與鏡像層相互結(jié)合,使得容器能夠在鏡像的基礎(chǔ)上添加或修改文件、運行進程,并保留這些更改,而不影響基礎(chǔ)鏡像的原始內(nèi)容。

下面是容器層的詳細介紹:

可寫性:
容器層是一個可讀寫的文件系統(tǒng)層,它允許在容器運行時修改和保存數(shù)據(jù)。容器中的進程可以向容器層添加、修改或刪除文件,這些更改將僅影響容器本身,而不會影響基礎(chǔ)鏡像或其他容器。

聯(lián)合文件系統(tǒng):
容器層使用聯(lián)合文件系統(tǒng)(UnionFS)技術(shù),它允許將多個文件系統(tǒng)合并到一個單一的文件系統(tǒng)中。Docker 使用聯(lián)合文件系統(tǒng)來將容器層和基礎(chǔ)鏡像層組合在一起,以形成容器的完整文件系統(tǒng)視圖。

輕量和高效:
容器層是基于鏡像層的增量修改,這使得容器非常輕量且高效。因為容器只保存與基礎(chǔ)鏡像的差異,所以它們通常只需要很少的磁盤空間,并且在創(chuàng)建和啟動時非常快速。

容器生命周期:
當(dāng)容器運行時,容器層處于活動狀態(tài)。容器內(nèi)的進程可以讀取和寫入容器層的文件系統(tǒng),并在運行時進行修改。當(dāng)容器停止后,容器層仍然存在,但它將保持在停止的狀態(tài),并且可以隨時重新啟動和使用。

臨時性:
容器層是臨時的,任何對容器的更改都只存在于容器的生命周期中。如果容器被刪除,容器層中的所有數(shù)據(jù)和修改也會被丟棄。這使得容器可以非常容易地重新創(chuàng)建和重置。

持久化數(shù)據(jù):
盡管容器層通常是臨時的,但通過掛載主機目錄或使用數(shù)據(jù)卷,可以實現(xiàn)容器數(shù)據(jù)的持久化。持久化數(shù)據(jù)不存儲在容器層中,而是存儲在主機的文件系統(tǒng)中或者專門管理的 Docker 數(shù)據(jù)卷中,這樣即使容器被刪除,數(shù)據(jù)仍然保留。

一旦鏡像運行了起來就形成了容器,而容器就是一個運行中的 Linux 系統(tǒng),其也是具有文件系統(tǒng)的。容器的這個文件系統(tǒng)是在 docker 鏡像最外層之上增加了一個可讀寫的容器層,對文件的任何更改都只存在于容器層。因此任何對容器的操作都不會影響到鏡像本身。

容器層如果需要修改某個文件,系統(tǒng)會從容器層開始向下一層層的查找該文件,直到找到為止。任何對于文件的操作都會記錄在容器層。例如,要修改某文件,容器層會首先把在鏡像層找到的文件 copy 到容器層,然后再進行修改。刪除文件也只會將存在于容器層中的文件副本刪除。

可以看出,Docker 容器就是一個疊加后的文件系統(tǒng),而這個容器層稱為 Union File System,聯(lián)合文件系統(tǒng)。

鏡像摘要

每個鏡像都有一個長度為 64 位的 16 進制字符串作為其摘要 digest。

介紹

Docker 鏡像摘要是指鏡像的摘要信息,通常被稱為鏡像的 Digest。它是鏡像內(nèi)容的唯一標(biāo)識符,類似于 Git 中的 SHA 值,用于確保鏡像的完整性和唯一性。摘要是一個由算法計算得出的長字符串,它代表了鏡像內(nèi)容的具體信息,包括鏡像層和配置信息。

以下是 Docker 鏡像摘要的詳細介紹:

唯一性:
Docker 鏡像摘要是由 SHA256 算法計算得出的,因此它是唯一的。不同的鏡像內(nèi)容必定會產(chǎn)生不同的摘要值。這保證了鏡像的唯一性,可以避免兩個鏡像在不同的倉庫或環(huán)境中具有相同的名稱和標(biāo)簽,但內(nèi)容實際上是不同的。

完整性驗證:
摘要值可以用來驗證鏡像的完整性。當(dāng)你從 Docker 鏡像倉庫拉取鏡像時,Docker 會根據(jù)摘要值來檢查鏡像內(nèi)容是否完整。如果鏡像內(nèi)容在傳輸過程中發(fā)生了任何變化,摘要值將會不匹配,Docker 將會拒絕使用這個鏡像。

不可篡改性:
鏡像摘要是根據(jù)鏡像內(nèi)容計算得出的,任何對鏡像內(nèi)容的修改都會導(dǎo)致摘要值的改變。因此,鏡像摘要具有不可篡改性,可以保護鏡像的完整性和安全性。

使用摘要拉取鏡像:
你可以使用鏡像的摘要值來拉取鏡像,而不僅僅使用標(biāo)簽。這在確保你拉取的是特定版本的鏡像時非常有用。使用摘要值拉取鏡像的格式為:**docker pull <image-name>@<digest>**

鏡像更新:
鏡像的摘要值是基于鏡像內(nèi)容計算的,因此,當(dāng)鏡像內(nèi)容發(fā)生更改時,摘要值也會隨之改變。這意味著每次更新鏡像時,都會產(chǎn)生一個新的摘要值。

摘要,即 digest,是鏡像內(nèi)容的一個 Hash 值,即所謂的 Content Hash(內(nèi)容散列)。只要鏡像內(nèi)容發(fā)生了變更,其內(nèi)容散列值就一定會發(fā)生改變。也就是說,一個鏡像一旦創(chuàng)建完畢,其 digest 就不會發(fā)生改變了,因為鏡像是只讀的。

Docker 默認(rèn)采用的 Hash 算法是 SHA256,即 Hah 值是一個長度為 256 位的二進制值。Docker 使用 16 進制表示,即變?yōu)榱碎L度為 64 位的字符串。

通過 docker inspect 命令可以查看指定鏡像的詳細信息。其中就包含該鏡像的摘要信息。

[root@docker ~]# docker inspect nginx

通過 docker images --digests 命令也可以查看到鏡像的摘要信息。

[root@docker ~]# docker images nginx --digests
REPOSITORY   TAG       DIGEST                                                                    IMAGE ID       CREATED         SIZE
nginx        latest    sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31   605c77e624dd   18 months ago   141MB

分發(fā)散列值

在 push 或 pull 鏡像時,都會對鏡像進行壓縮以減少網(wǎng)絡(luò)帶寬和傳輸時長。但壓縮會改變鏡像內(nèi)容,會導(dǎo)致經(jīng)過網(wǎng)絡(luò)傳輸后,鏡像內(nèi)容與其 digest 不相符。出現(xiàn)問題。(也就是在自己機器上進行壓縮的hash值和傳輸?shù)絛ocker hub后hsah值不相同了,因為傳輸?shù)臅r候還會壓縮)

? 為了避免該問題,Docker 又為鏡像配置了 Distribution Hash(分發(fā)散列值)。在鏡像被壓縮后立即計算分發(fā)散列值,然后使該值隨壓縮過的鏡像一同進行發(fā)送。在接收方接收后,立即計算壓縮鏡像的分發(fā)散列值,再與攜帶的分發(fā)散列值對比。如果相同,則說明傳輸沒有問題

鏡像的hsah值和壓縮后的hash值會一起傳輸?shù)絛ocker hub

多架構(gòu)鏡像

Docker 多架構(gòu)鏡像(Multi-architecture Images)是指一種能夠在不同硬件架構(gòu)上運行的 Docker 鏡像。傳統(tǒng)上,Docker 鏡像是為特定的硬件架構(gòu)(如x86、ARM等)構(gòu)建的,而多架構(gòu)鏡像則允許在不同的硬件架構(gòu)上共享和使用相同的鏡像。

下面是 Docker 多架構(gòu)鏡像的詳細介紹:

跨平臺支持:
Docker 多架構(gòu)鏡像允許在不同的硬件架構(gòu)上運行相同的鏡像。這意味著你可以使用同一個鏡像構(gòu)建和部署應(yīng)用程序,而無需為不同的硬件架構(gòu)編寫和維護多個鏡像。

架構(gòu)選擇:
Docker 多架構(gòu)鏡像支持在構(gòu)建鏡像時選擇目標(biāo)架構(gòu)。這意味著你可以根據(jù)目標(biāo)平臺的硬件架構(gòu),選擇適當(dāng)?shù)幕A(chǔ)鏡像和依賴項來構(gòu)建鏡像。例如,你可以使用不同的 Dockerfile 和構(gòu)建過程來創(chuàng)建適用于 x86、ARM、ARM64 等不同架構(gòu)的鏡像。

Manifest List:
Docker 通過使用 Manifest List 來支持多架構(gòu)鏡像。Manifest List 是一個包含多個平臺的描述文件,它允許 Docker 客戶端根據(jù)當(dāng)前環(huán)境自動選擇最合適的鏡像。Docker 客戶端會檢查當(dāng)前主機的架構(gòu),并根據(jù) Manifest List 中的信息拉取和使用對應(yīng)的鏡像。

跨架構(gòu)構(gòu)建:
Docker 多架構(gòu)鏡像的構(gòu)建過程通常涉及交叉編譯或使用具有原生支持多架構(gòu)構(gòu)建的工具鏈。這樣可以確保在一個架構(gòu)上構(gòu)建的鏡像可以在其他支持的架構(gòu)上運行。

鏡像推送與拉?。?/strong>
Docker 多架構(gòu)鏡像可以通過 Docker Hub 或私有鏡像倉庫進行推送和拉取。你可以將多架構(gòu)鏡像推送到 Docker Hub 的同一個倉庫中,并通過標(biāo)簽來區(qū)分不同的架構(gòu)。Docker 客戶端會根據(jù)當(dāng)前架構(gòu)自動選擇并拉取適合的鏡像。

Multi-architecture Image,即多架構(gòu)鏡像,是某中的某鏡像針對不同操作系統(tǒng)/系統(tǒng)架構(gòu)的不同鏡像實現(xiàn)。即多架構(gòu)鏡像中包含的鏡像的:都是相同的,但它們針對的操作系統(tǒng)/系統(tǒng)架構(gòu)是不同的

工作原理

Docker 的多架構(gòu)鏡像(Multi-architecture Images)是指在同一個鏡像中包含了多個不同硬件架構(gòu)的二進制文件,使得同一個鏡像可以在多個不同架構(gòu)的計算機上運行。這種機制使得在不同硬件平臺上部署和運行容器變得更加靈活和便捷。下面是 Docker 多架構(gòu)鏡像的工作原理的詳細介紹:

多平臺構(gòu)建:
Docker 多架構(gòu)鏡像的工作原理涉及到多平臺構(gòu)建。在構(gòu)建過程中,通過 Docker CLI 或構(gòu)建工具(如 Buildx)指定目標(biāo)平臺架構(gòu),然后 Docker 引擎會自動根據(jù)目標(biāo)架構(gòu)進行構(gòu)建。這意味著同一個 Dockerfile 可以用于構(gòu)建多個不同架構(gòu)的鏡像。

平臺特定文件:
在多架構(gòu)鏡像中,鏡像的文件系統(tǒng)中可能包含了針對特定架構(gòu)的二進制文件。這些文件通常存儲在不同的文件夾或路徑中,并使用與架構(gòu)相關(guān)的標(biāo)識。例如,Linux x86 架構(gòu)的文件可能存儲在 /x86 文件夾下,而 ARM 架構(gòu)的文件可能存儲在 /arm 文件夾下。

平臺標(biāo)簽和映射:
Docker 多架構(gòu)鏡像通過使用平臺標(biāo)簽和映射來管理不同架構(gòu)的鏡像文件。每個鏡像都可以包含一個或多個平臺標(biāo)簽,用于指示鏡像適用的架構(gòu)。標(biāo)簽的格式通常是 架構(gòu)-操作系統(tǒng)。例如,linux/amd64 表示適用于 x86 架構(gòu)的 Linux 操作系統(tǒng)。

平臺選擇策略:
在運行容器時,Docker 引擎會根據(jù)主機的架構(gòu)選擇最合適的鏡像進行部署。它會根據(jù)主機的架構(gòu)和可用鏡像的架構(gòu)進行匹配,并選擇匹配的鏡像來運行容器。如果找不到完全匹配的鏡像,它會嘗試選擇最接近的架構(gòu)進行運行。

Manifest 文件:
多架構(gòu)鏡像還使用了 Docker Manifest 文件來存儲有關(guān)不同架構(gòu)的鏡像的元數(shù)據(jù)信息。Manifest 文件包含了不同平臺的映射關(guān)系、鏡像 ID 和 Digest 等信息。通過 Manifest 文件,Docker 引擎能夠在運行容器時自動選擇合適的鏡像。

在 Docker Hub 中,鏡像的多架構(gòu)信息保存在 Manifest 文件中。在拉取鏡像時,Docker會隨著 pull 命令將當(dāng)前 Docker 系統(tǒng)的 OS 與架構(gòu)信息一并提交給 Docker Hub。Docker Hub 首先會根據(jù)鏡像的:查找是否存在 Manifest。如果不存在,則直接查找并返回:鏡像即可;如果存在,則會在 Manifest 中查找是否存在指定系統(tǒng)/架構(gòu)的鏡像。如果存在該系統(tǒng)/架構(gòu),則根據(jù) Manifest 中記錄的地址找到該鏡像的位置。

到此這篇關(guān)于Docker鏡像分層的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)docker鏡像分層內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在alpine鏡像中添加ansible服務(wù)的方法

    在alpine鏡像中添加ansible服務(wù)的方法

    今天小編就為大家分享一篇關(guān)于在alpine鏡像中添加ansible服務(wù)的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 利用Docker?運行?python?簡單程序

    利用Docker?運行?python?簡單程序

    這篇文章主要介紹了利用Docker?運行?python?簡單程序,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • Docker安裝Jenkins的實現(xiàn)步驟

    Docker安裝Jenkins的實現(xiàn)步驟

    版本與jdk版本以及各類插件有對應(yīng)關(guān)系,所以普通安裝較為麻煩,本文主要介紹了Docker安裝Jenkins的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • docker: invalid reference format.問題

    docker: invalid reference format.問題

    這篇文章主要介紹了docker: invalid reference format.問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 基于docker搭建selenium分布式環(huán)境

    基于docker搭建selenium分布式環(huán)境

    這篇文章主要介紹了基于docker搭建selenium分布式環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • docker容器無法解析域名的解決方案

    docker容器無法解析域名的解決方案

    這篇文章主要介紹了docker容器無法解析域名的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-10-10
  • ubuntu如何在docker容器中安裝strongswan

    ubuntu如何在docker容器中安裝strongswan

    這篇文章主要介紹了ubuntu如何在docker容器中安裝strongswan,起動一個ubuntu容器,我是用的docker compose啟動的,compose的配置文件為ipsec-strongswan.yml,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Docker鏡像分層的實現(xiàn)示例

    Docker鏡像分層的實現(xiàn)示例

    本文主要介紹了Docker鏡像分層的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Docker部署SQL?Server及最佳應(yīng)用小結(jié)

    Docker部署SQL?Server及最佳應(yīng)用小結(jié)

    SQL?Server是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),本文總結(jié)了容器環(huán)境下的部署及實踐應(yīng)用,需要的朋友可以參考下
    2022-08-08
  • Docker安裝node-red、導(dǎo)入節(jié)點、部署查看的步驟詳解

    Docker安裝node-red、導(dǎo)入節(jié)點、部署查看的步驟詳解

    Node-RED設(shè)計使用的場景是IoT,但是作為一個流編排引擎,顯然它能做的事情更多,比如使用容器化的方式進行構(gòu)建、打包、部署等操作也是可行的,這篇文章繼續(xù)介紹Docker安裝node-red、導(dǎo)入節(jié)點、部署查看的相關(guān)知識,感興趣的朋友一起看看吧
    2022-01-01

最新評論

滁州市| 商水县| 柘荣县| 金塔县| 集贤县| 巴东县| 名山县| 大方县| 崇州市| 阳高县| 彩票| 龙门县| 翁牛特旗| 阿尔山市| 松溪县| 许昌市| 隆化县| 正镶白旗| 麻江县| 澄城县| 即墨市| 都匀市| 昌黎县| 密山市| 于田县| 炉霍县| 平陆县| 浮山县| 溧水县| 邳州市| 三江| 壤塘县| 南阳市| 三门县| 黎平县| 田林县| 上虞市| 县级市| 措美县| 汉川市| 天镇县|