成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Docker鏡像加載原理

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

從網站建設到定制行業(yè)解決方案,為提供成都網站建設、網站制作服務體系,各種行業(yè)企業(yè)客戶提供網站建設解決方案,助力業(yè)務快速發(fā)展。創(chuàng)新互聯(lián)將不斷加快創(chuàng)新步伐,提供優(yōu)質的建站服務。

遠程倉庫下載

朋友拷貝

自己制作一個鏡像 DockerFile

Docker鏡像加載原理

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

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

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

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

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

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

 

在添加額外的鏡像層的同時,鏡像始終保持是當前所有鏡像的組合,理解這一點非常重要。下圖中舉了一個簡單的例子,每個鏡像層包含3個文件,而鏡像包含了來自兩個鏡像層的6個文件。
上圖中的鏡像層跟之前圖中的略有區(qū)別,主要目的是便于展示文件。 下圖中展示了一個稍微復雜的三層鏡像,在外部看來整個鏡像只有6個文件,這是因為最上層中的文件7是文件5的一個更新版本。

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

分層下載的好處

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

特點
 Docker鏡像都是只讀的,當容器啟動時,一個新的可寫層被加載到鏡像的頂部! 這一層就是我們通常說的容器層(run),容器之下的都叫鏡像層(遠程pull)! 所有操作都是基于容器層

 

Commit鏡像 如何提交一個自己的鏡像? Docker commitdocker commit 提交容器成為一個新的副本docker commit -m="提交的描述信息" -a="作者" 容器id 目標鏡像名:[TAG]#運行一個默認的tomcat鏡像[root@docker ~]# docker run -it -p 8080:8080 tomcat[root@docker ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES792ca37197e8 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)這個默認的tomcat 是沒有webapps應用,是因為鏡像的原因,官方的鏡像默認webapps下沒有文件,自己拷貝進去基本的文件root@792ca37197e8:/usr/local/tomcat# cp -r webapps.dist/* webapps#瀏覽器訪問,測試成功http://192.168.100.100:8080/#提交修改后的容器成為一個新的鏡像[root@docker ~]# docker commit -a="pakho" -m="add webapps app" 792ca37197e8 tomcat02:1.0sha256:d6d429f9d2ba25af8f66bd3e7a7de489cf2219828ea755ce1d0a1a7816c27731[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEtomcat02 1.0 d6d429f9d2ba 28 seconds ago 672MBDocker鏡像(Images)總結 Docker鏡像(Images) 的主要特點是,分層、寫時復制、內容尋址 和 聯(lián)合掛載。 Docker鏡像是Docker容器運行的基礎,沒有Docker鏡像,就不可能有Docker容器,這也是Docker的設計原則之一 可以理解的是:Docker鏡像畢竟是鏡像,屬于靜態(tài)的內容;而Docker容器就不一樣了,容器屬于動態(tài)的內容。動態(tài)的內容,大家很容易聯(lián)想到進程,內存,CPU等之類的東西。的確,Docker容器作為動態(tài)的內容,都會包含這些 為了便于理解,大家可以把Docker容器,理解為一個或多個運行進程,而這些運行進程將占有相應的內存,相應的CPU計算資源,相應的虛擬網絡設備以及相應的文件系統(tǒng)資源。而Docker容器所占用的文件系統(tǒng)資源,則通過Docker鏡像的鏡像層文件來提供

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

分享標題:Docker鏡像加載原理
轉載來于:http://jinyejixie.com/article16/sdggg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站內鏈Google、定制網站、App設計、網站改版微信小程序

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設
赫章县| 南涧| 志丹县| 凌海市| 兰西县| 宜黄县| 万荣县| 大埔区| 祁东县| 静乐县| 澄江县| 武川县| 搜索| 遂平县| 抚远县| 日喀则市| 天柱县| 白山市| 黄陵县| 贵南县| 宣化县| 临猗县| 即墨市| 延津县| 陇川县| 临城县| 阳原县| 五寨县| 轮台县| 吐鲁番市| 湟中县| 凯里市| 扶沟县| 沙坪坝区| 崇文区| 天祝| 双城市| 博野县| 华池县| 溧水县| 深水埗区|