目錄
創新互聯建站專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站制作、網站設計、外貿網站建設、易縣網絡推廣、微信小程序開發、易縣網絡營銷、易縣企業策劃、易縣品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯建站為所有大學生創業者提供易縣建站搭建服務,24小時服務熱線:18982081108,官方網址:vcdvsql.cn
今天我們看看容器的層的概念。
中,我們知道了,容器是一個進程,在這個進程的基礎上,添加了下面3個部分:
1、啟動Linux Namespace的配置實現與物理機的隔離。
2、設置Cgroups參數限制容器的資源。
3、生成系統文件目錄,也就是rootfs文件,也叫鏡像文件
這里需要備注的是:rootfs只是容器需要使用的基本文件的組合,并不包括操作系統內核,容器的操作系統內核依舊是使用宿主機的內核。當然,rootfs的存在,并不是沒有意義,它的存在,使得容器擁有了一個最主要的性能:一致性。01 容器的一致性
容器的rootfs打包了操作系統的所有文件和目錄,包含了所有的依賴,有了這個特性,就使得容器無論在本地、云端,用戶只需要解壓打包好的容器鏡像,那么應用運行的環境就被搭建好了。
這就是容器的一致性。02 層的概念
"我之所以看的遠,是因為我站在巨人的肩膀上",牛頓曾經這句話在今天也依舊適用。"不要做重復造輪子的人",在我們開發應用的時候,我們只需要借助Linux操作系統去開發即可,我們不需要為了跑我們的應用,重新開發一個Linux系統。
在容器的使用過程中,如果我們已經存在一個已有的MySQL容器鏡像,里面有數據A;此時,其他人也想要一個MySQL容器鏡像,導入他們的數據B,這個時候,我們只需要在我們自己的MySQL容器刪除數據A,再重新導入數據B即可。
在上面描述的場景中,一旦刪除數據A,導入數據B,那么這個容器我們自己就不能用了,因為數據A已經刪除了。這顯然不是我們想要的結果。很明顯,數據集A和數據集B都需要的是一個安裝了MySQL,但是沒有數據的容器鏡像(也就是rootfs)。
Docker軟件在設計的時候,引入了"層"的概念,很巧妙的解決了這個問題。
"層"的概念是通過聯合文件系統AuFS來實現的,全稱是Advance UnionFS。它的概念不難理解,舉例如下:
目錄1包含文件a,文件c
目錄2包含文件b,文件c
通過聯合文件方式,將目錄1和目錄2掛在在目錄3上,此時,目錄3擁有文件a、b、c三個文件。
此時,如果在目錄3中對文件a、b、c進行修改,對應的目錄1和目錄2也會生效。
如何通過"聯合文件系統"實現層,這個問題其實比較復雜,留給有興趣讀者自己思考吧,這里,我們只需要了解層的概念是通過聯合文件系統實現的就行。
下面是一個mysql基礎鏡像的"層"的例子:[root@VM-0-14-centos ~]# docker image inspect docker.io/mysql [ { "Id": "sha256:db2b37ec6181ee1f367363432f841bf3819d4a9f61d26e42ac16e5bd7ff2ec18", "RepoTags": [ "docker.io/mysql:latest" ],...... "RootFS": { "Type": "layers", "Layers": [ "sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c", "sha256:329fe06a30f03f9131ce8d9db2e8a9f725b18efe3457d6f015e1c4d8a3f41a0a", "sha256:ec8c80284c72bcf47ffedc0dde4d5792de761d52f974c30d37d52b9ac00e8a2a", "sha256:9dae2565e824235798981525d6ff9114817b7139c073e0d216b00ae9e58f74d0", "sha256:36b89ee4c647b9c21de8b5476b4922efc873aba69705c169e1a3edcf9128679b", "sha256:c21e35e55228365b268f57fac382a6e991db216cb03d9b7079496f5498956ab0", "sha256:15b463db445cb750fa6bc908a41fd18e38c4d2a02a978b66beb598c4f3f57b95", "sha256:7832ac00d41eda3a773a18408dea0b8e05ddbdd3a1e94afef3b6e3dc6444b7bb", "sha256:7f893b7c04ac2f939737d2da4e15af796c7acc0fd10c2951d9ae5bf33ceec2dc", "sha256:060fef62a228fff7e9dc3b7008bc9089e642ef29dc699f7e90c36ced5b2e75c6", "sha256:af6e790b82373cc65ca73efe5cc8945731525a9dcae6deeea2a5a5802561a72a", "sha256:9b0377a95c0e0bd5aa5b220449d17333faaa0e2bd7e8b93565beeadbf3906646" ] } }]
可以看到,RootFS字樣的就是容器的文件系統,Layers就是“層”。
那么一個docker容器鏡像,分為哪些層呢???
按照功能的不同,主要分為只讀層、init層和讀寫層。
只讀層:
只讀層的掛載方式都是只讀的,這些層都是以增量的方式掛載了操作系統的一部分。
可讀寫層:
它是這個鏡像的最頂層,它的掛載方式為讀寫,沒有寫入文件之前,這個目錄是空的,而一旦在容器里面執行了寫操作,你修改的內容就會通過增量的方式出現在這個層中。
init層:
init層是docker專門生成的一個內部層,主要是存放/etc/hosts、/etc/resolv.conf等文件的。
之所以存放這些特定文件,是因為這些文件本來是操作系統的一部分,但是用戶的應用程序往往會修改這些文件,這些修改只對當前容器有效,我們不希望docker commit的時候,將這些改變同讀寫層一起提交掉。
幾點注意:
1、用戶執行docker commit的時候,只會提交讀寫層的內容。
2、如果我們要刪除一個只讀層文件a.txt,那么我們只需要在讀寫層寫一個同名的文件.wh.a.txt,這樣,a.txt這個文件就會被.wh.a.txt這個文件給遮擋起來,實現了刪除的目的。03 分層設計的優點
通過分層設計,增量式數據操作,每次拉取、修改的內容,比完整的操作系統小;
底層只讀層的共享,讓多個容器鏡像使用的總空間,也比每個容器鏡像的總和要小;
同時,基于容器鏡像的團隊協作,可以將各個公司,不同領域的人聯系起來,更加快速的迭代出新的功能。
以上就是詳解docker容器的層的概念的詳細內容,更多關于docker容器的層的資料請關注腳本之家其它相關文章!
本文題目:詳解docker容器的層的概念
當前鏈接:http://vcdvsql.cn/article26/cpocg.html
成都網站建設公司_創新互聯,為您提供網站維護、ChatGPT、企業建站、云服務器、外貿網站建設、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯