国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Docker鏡像加載原理

發(fā)布時(shí)間:2021-08-15 18:37 來(lái)源: 閱讀:0 作者:Pakho` 欄目: 服務(wù)器 歡迎投稿:712375056

目錄

    Docker鏡像

    鏡像是什么?

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

    遠程倉庫下載

    朋友拷貝

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

    Docker鏡像加載原理

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

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

    Docker鏡像加載原理

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

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

    • 對于一個(gè)精簡(jiǎn)的OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序庫就可以了,因為底層直接用Host的kernel自己只需要提供roots就可以了。由此可見(jiàn)對于不同的linux發(fā)行版, bootfs基本是一致的, rootfs會(huì )有差別,因此不同的發(fā)行版可以公用bootfs。
    • 虛擬機是分鐘級別,容器是秒級! 分層理解 Docker的分層思想一層一層下載,逐層檢測,存在即跳過(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鏡像要采用這種分層的結構呢?
    • 最大的好處,我覺(jué)得莫過(guò)于是資源共享了!比如有多個(gè)鏡像都從相同的Base鏡像構建而來(lái),那么宿主機只需在磁盤(pán)上保留一份base鏡像,同時(shí)內存中也只需要加載一份base鏡像,這樣就可以為所有的容器服務(wù)了,而且鏡像的每一層都可以被共享。
    • 查看鏡像分層的方式可以通過(guò)docker image inspect +容器命令!
    • 觀(guān)察Layers(層)

    理解分層的含義

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

     

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

    • 上圖中的鏡像層跟之前圖中的略有區別,主要目的是便于展示文件。
    • 下圖中展示了一個(gè)稍微復雜的三層鏡像,在外部看來(lái)整個(gè)鏡像只有6個(gè)文件,這是因為最上層中的文件7是文件5的一個(gè)更新版本。

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

    分層下載的好處

    假設有些應用的層是相同的,就可以直接復用!

    特點(diǎn)

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

     

    Commit鏡像

    • 如何提交一個(gè)自己的鏡像?
    • Docker commit
    docker commit 提交容器成為一個(gè)新的副本
    
    docker commit -m="提交的描述信息" -a="作者" 容器id 目標鏡像名:[TAG]
    
    #運行一個(gè)默認的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ā)現這個(gè)默認的tomcat 是沒(méi)有webapps應用,是因為鏡像的原因,官方的鏡像默認webapps下沒(méi)有文件,自己拷貝進(jìn)去基本的文件
    root@792ca37197e8:/usr/local/tomcat# cp -r webapps.dist/* webapps
    
    #瀏覽器訪(fǎng)問(wèn),測試成功
    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)總結

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

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

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

    最好看的2018中文字幕免费视频| 亚洲国产精品久久久久爰色欲| 精品熟女少妇AV免费久久| 国产精品久久久久久超碰| 国内精品免费视频自在线拍| 18禁无遮黄污|