亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker鏡像加載原理

 更新時(shí)間:2021年06月25日 11:06:06   作者:Pakho`  
Docker鏡像是Docker容器運(yùn)行的基礎(chǔ),沒(méi)有Docker鏡像,就不可能有Docker容器,這也是Docker的設(shè)計(jì)原則之一 ,本文給大家介紹Docker鏡像加載原理,感興趣的朋友一起看看吧

Docker鏡像

鏡像是什么?

  •  鏡像是一種輕量級(jí)、可執(zhí)行的獨(dú)立軟件包,用來(lái)打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開(kāi)發(fā)的軟件,它包含運(yùn)行某個(gè)軟件所需的所有內(nèi)容,包括代碼、運(yùn)行時(shí)、庫(kù)、環(huán)境變量配置文件。
  • 所有的應(yīng)用,直接打包docker鏡像,就可以直接跑起來(lái)!
  • 如何得到鏡像?

遠(yuǎn)程倉(cāng)庫(kù)下載

朋友拷貝

自己制作一個(gè)鏡像 DockerFile

Docker鏡像加載原理

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

  • UnionFS (聯(lián)合文件系統(tǒng)) :Union文件系統(tǒng)(UnionFS)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來(lái)一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下(unite several directories into a single virtualfilesystem)。Union文件系統(tǒng)是Docker鏡像的基礎(chǔ)。鏡像可以通過(guò)分層來(lái)進(jìn)行繼承,基于基礎(chǔ)鏡像(沒(méi)有父鏡像),可以制作各種具體的應(yīng)用鏡像。
  • 特性:一次同時(shí)加載多個(gè)文件系統(tǒng),但從外面看起來(lái),只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來(lái),這樣最終的文件系統(tǒng)會(huì)包含所有底層的文件和目錄

Docker鏡像加載原理

  • docker的鏡像實(shí)際上由一層一層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)UnionFS。
  • bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導(dǎo)加載kernel, Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng),在Docker鏡像的最底層是boots。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸載bootfs。
  • roots (root fle system),在bootfs之上。包含的就是典型Linux系統(tǒng)中的/dev,/proc, /bin, /etc等標(biāo)準(zhǔn)目錄和文件。rootfs就是各種不同的操作系統(tǒng)發(fā)行版,比如Ubuntu ,Centos等等。

在這里插入圖片描述

平時(shí)我們安裝虛擬機(jī)的CentOS都是好幾個(gè)G,為什么Docker才200M?

在這里插入圖片描述

  • 對(duì)于一個(gè)精簡(jiǎn)的OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序庫(kù)就可以了,因?yàn)榈讓又苯佑肏ost的kernel自己只需要提供roots就可以了。由此可見(jiàn)對(duì)于不同的linux發(fā)行版, bootfs基本是一致的, rootfs會(huì)有差別,因此不同的發(fā)行版可以公用bootfs。
  • 虛擬機(jī)是分鐘級(jí)別,容器是秒級(jí)! 分層理解 Docker的分層思想一層一層下載,逐層檢測(cè),存在即跳過(guò),否則下載
[root@docker ~]# docker pull redis 
Using default tag: latest
latest: Pulling from library/redis
69692152171a: Already exists 
a4a46f2fd7e0: Pull complete 
bcdf6fddc3bd: Pull complete 
2902e41faefa: Pull complete 
df3e1d63cdb1: Pull complete 
fa57f005a60d: Pull complete 
Digest: sha256:7e2c6181ad5c425443b56c7c73a9cd6df24a122345847d1ea9bb86a5afc76325
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
  • 為什么Docker鏡像要采用這種分層的結(jié)構(gòu)呢?
  • 最大的好處,我覺(jué)得莫過(guò)于是資源共享了!比如有多個(gè)鏡像都從相同的Base鏡像構(gòu)建而來(lái),那么宿主機(jī)只需在磁盤(pán)上保留一份base鏡像,同時(shí)內(nèi)存中也只需要加載一份base鏡像,這樣就可以為所有的容器服務(wù)了,而且鏡像的每一層都可以被共享。
  • 查看鏡像分層的方式可以通過(guò)docker image inspect +容器命令!
  • 觀察Layers(層)

在這里插入圖片描述

理解分層的含義

  •  所有的Docker鏡像都起始于一個(gè)基礎(chǔ)鏡像層,當(dāng)進(jìn)行修改或增加新的內(nèi)容時(shí),就會(huì)在當(dāng)前鏡像層之上,創(chuàng)建新的鏡像層
  • 舉一個(gè)簡(jiǎn)單的例子,假如基于Ubuntu Linux 16.04創(chuàng)建一個(gè)新的鏡像,這就是新鏡像的第一層;如果在該鏡像中添加Python包,就會(huì)在基礎(chǔ)鏡像層之上創(chuàng)建第二個(gè)鏡像層;如果繼續(xù)添加一個(gè)安全補(bǔ)丁,就會(huì)創(chuàng)建第三個(gè)鏡像層。
  • 該鏡像當(dāng)前已經(jīng)包含3個(gè)鏡像層,如下圖所示(這只是一個(gè)用于演示的很簡(jiǎn)單的例子)。

在這里插入圖片描述 

在添加額外的鏡像層的同時(shí),鏡像始終保持是當(dāng)前所有鏡像的組合,理解這一點(diǎn)非常重要。下圖中舉了一個(gè)簡(jiǎn)單的例子,每個(gè)鏡像層包含3個(gè)文件,而鏡像包含了來(lái)自兩個(gè)鏡像層的6個(gè)文件。

在這里插入圖片描述

  • 上圖中的鏡像層跟之前圖中的略有區(qū)別,主要目的是便于展示文件。
  • 下圖中展示了一個(gè)稍微復(fù)雜的三層鏡像,在外部看來(lái)整個(gè)鏡像只有6個(gè)文件,這是因?yàn)樽钌蠈又械奈募?是文件5的一個(gè)更新版本。

在這里插入圖片描述

  • 這種情況下,上層鏡像層中的文件覆蓋了底層鏡像層中的文件。這樣就使得文件的更新版本作為一個(gè)新鏡像層添加到鏡像當(dāng)中。
  • Docker通過(guò)存儲(chǔ)引擎(新版本采用快照機(jī)制)的方式來(lái)實(shí)現(xiàn)鏡像層堆棧,并保證多鏡像層對(duì)外展示為統(tǒng)一的文件系統(tǒng)。
  • Linux上可用的存儲(chǔ)引擎有AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。顧名思義,每種存儲(chǔ)引擎都基于Linux中對(duì)應(yīng)的文件系統(tǒng)或者塊設(shè)備技術(shù),并且每種存儲(chǔ)引擎都有其獨(dú)有的性能特點(diǎn)。
  • Docker在Windows上僅支持windowsfilter一種存儲(chǔ)引擎,該引擎基于NTFS文件系統(tǒng)之上實(shí)現(xiàn)了分層和CoW[1].
  • 下圖展示了與系統(tǒng)顯示相同的三層鏡像。所有鏡像層堆疊并合并,對(duì)外提供統(tǒng)一的視圖。

在這里插入圖片描述

分層下載的好處

假設(shè)有些應(yīng)用的層是相同的,就可以直接復(fù)用!

特點(diǎn)

  •  Docker鏡像都是只讀的,當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫(xiě)層被加載到鏡像的頂部!
  • 這一層就是我們通常說(shuō)的容器層(run),容器之下的都叫鏡像層(遠(yuǎn)程pull)!
  • 所有操作都是基于容器層

在這里插入圖片描述 

Commit鏡像

  • 如何提交一個(gè)自己的鏡像?
  • Docker commit
docker commit 提交容器成為一個(gè)新的副本

docker commit -m="提交的描述信息" -a="作者" 容器id 目標(biāo)鏡像名:[TAG]

#運(yùn)行一個(gè)默認(rèn)的tomcat鏡像
[root@docker ~]# docker run -it -p 8080:8080  tomcat

[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                       NAMES
792ca37197e8   tomcat    "catalina.sh run"   34 seconds ago   Up 32 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   upbeat_mcnulty

[root@docker ~]# docker exec -it 792ca37197e8 /bin/bash
#發(fā)現(xiàn)這個(gè)默認(rèn)的tomcat 是沒(méi)有webapps應(yīng)用,是因?yàn)殓R像的原因,官方的鏡像默認(rèn)webapps下沒(méi)有文件,自己拷貝進(jìn)去基本的文件
root@792ca37197e8:/usr/local/tomcat# cp -r webapps.dist/* webapps

#瀏覽器訪問(wèn),測(cè)試成功
http://192.168.100.100:8080/

#提交修改后的容器成為一個(gè)新的鏡像
[root@docker ~]# docker commit -a="pakho" -m="add webapps app" 792ca37197e8 tomcat02:1.0
sha256:d6d429f9d2ba25af8f66bd3e7a7de489cf2219828ea755ce1d0a1a7816c27731

[root@docker ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
tomcat02              1.0       d6d429f9d2ba   28 seconds ago   672MB

Docker鏡像(Images)總結(jié)

在這里插入圖片描述

  • Docker鏡像(Images) 的主要特點(diǎn)是,分層、寫(xiě)時(shí)復(fù)制、內(nèi)容尋址 和 聯(lián)合掛載。
  • Docker鏡像是Docker容器運(yùn)行的基礎(chǔ),沒(méi)有Docker鏡像,就不可能有Docker容器,這也是Docker的設(shè)計(jì)原則之一
  • 可以理解的是:Docker鏡像畢竟是鏡像,屬于靜態(tài)的內(nèi)容;而Docker容器就不一樣了,容器屬于動(dòng)態(tài)的內(nèi)容。動(dòng)態(tài)的內(nèi)容,大家很容易聯(lián)想到進(jìn)程,內(nèi)存,CPU等之類的東西。的確,Docker容器作為動(dòng)態(tài)的內(nèi)容,都會(huì)包含這些
  • 為了便于理解,大家可以把Docker容器,理解為一個(gè)或多個(gè)運(yùn)行進(jìn)程,而這些運(yùn)行進(jìn)程將占有相應(yīng)的內(nèi)存,相應(yīng)的CPU計(jì)算資源,相應(yīng)的虛擬網(wǎng)絡(luò)設(shè)備以及相應(yīng)的文件系統(tǒng)資源。而Docker容器所占用的文件系統(tǒng)資源,則通過(guò)Docker鏡像的鏡像層文件來(lái)提供

以上就是Docker鏡像原理的詳細(xì)內(nèi)容,更多關(guān)于Docker鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • docker部署SpringCloud微服務(wù)項(xiàng)目方式

    docker部署SpringCloud微服務(wù)項(xiàng)目方式

    這篇文章主要介紹了docker部署SpringCloud微服務(wù)項(xiàng)目方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Docker使用阿里加速器安裝centos教程

    Docker使用阿里加速器安裝centos教程

    這篇文章主要介紹了Docker使用阿里加速器安裝centos教程,需要的朋友可以參考下
    2017-04-04
  • AntDesign?Docker部署詳細(xì)流程

    AntDesign?Docker部署詳細(xì)流程

    這篇文章主要為大家介紹了AntDesign?Docker部署流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 詳解docker使用阿里云Docker鏡像庫(kù)加速(修訂版)

    詳解docker使用阿里云Docker鏡像庫(kù)加速(修訂版)

    這篇文章主要介紹了詳解docker使用阿里云Docker鏡像庫(kù)加速(修訂版),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Docker掛載資料卷保存MySQL數(shù)據(jù)

    Docker掛載資料卷保存MySQL數(shù)據(jù)

    這篇文章介紹了Docker掛載資料卷保存MySQL數(shù)據(jù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • 云服務(wù)器安裝docker環(huán)境的解決方案

    云服務(wù)器安裝docker環(huán)境的解決方案

    這篇文章主要介紹了云服務(wù)器安裝docker環(huán)境的解決方案,可以使用termins連接服務(wù)器,詳細(xì)介紹了docker安裝與Portainer安裝過(guò)程,需要的朋友可以參考下
    2024-04-04
  • 聊聊docker?單機(jī)部署redis集群的問(wèn)題

    聊聊docker?單機(jī)部署redis集群的問(wèn)題

    這篇文章主要介紹了docker?單機(jī)部署redis集群,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Windows10系統(tǒng)下docker安裝指南以及踩坑解決

    Windows10系統(tǒng)下docker安裝指南以及踩坑解決

    這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下docker安裝指南以及踩坑解決的相關(guān)資料,相信大家都知道Docker有很多種安裝的選擇,其中支持最好的是Ubuntu系統(tǒng),而且docker如果想在windows上運(yùn)行必須借助docker-machine,需要的朋友可以參考下
    2023-08-08
  • 使用Docker部署Spring Boot項(xiàng)目的實(shí)現(xiàn)步驟

    使用Docker部署Spring Boot項(xiàng)目的實(shí)現(xiàn)步驟

    本文主要介紹了使用Docker部署Spring Boot項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 在CentOS啟動(dòng)時(shí)自動(dòng)加載內(nèi)核模塊overlayfs操作

    在CentOS啟動(dòng)時(shí)自動(dòng)加載內(nèi)核模塊overlayfs操作

    這篇文章主要介紹了在CentOS啟動(dòng)時(shí)自動(dòng)加載內(nèi)核模塊overlayfs操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11

最新評(píng)論