成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Docker 鏡像本地存儲機(jī)制及容器啟動原理

存儲 存儲軟件
Docker 鏡像不是一個單一的文件,而是有多層構(gòu)成。我們可通過 docker images 獲取本地的鏡像列表及對應(yīng)的元信息, 接著可通過docker history 查看某個鏡像各層內(nèi)容及對應(yīng)大小,每層對應(yīng)著 Dockerfile 中的一條指令。

 近幾年 Docker 風(fēng)靡技術(shù)圈,不少從業(yè)人員都或多或少使用過,也了解如何通過 Dockerfile 構(gòu)建鏡像,從遠(yuǎn)程鏡像倉庫拉取自己所需鏡像,推送構(gòu)建好的鏡像至遠(yuǎn)程倉庫,根據(jù)鏡像運(yùn)行容器等。這個過程十分簡單,只需執(zhí)行 docker build、docker pull、docker push、docker run 等操作即可。但大家是否想過鏡像在本地到底是如何存儲的?容器又是如何根據(jù)鏡像啟動的?推送鏡像至遠(yuǎn)程鏡像倉庫時,服務(wù)器又是如何存儲的呢?下面我們就來簡單聊一聊。

Docker 鏡像不是一個單一的文件,而是有多層構(gòu)成。我們可通過 docker images 獲取本地的鏡像列表及對應(yīng)的元信息, 接著可通過docker history 查看某個鏡像各層內(nèi)容及對應(yīng)大小,每層對應(yīng)著 Dockerfile 中的一條指令。Docker 鏡像默認(rèn)存儲在 /var/lib/docker/中,可通過 DOCKER_OPTS 或者 docker daemon 運(yùn)行時指定 –graph= 或 -g 指定。

[[231661]]

Docker 使用存儲驅(qū)動來管理鏡像每層內(nèi)容及可讀寫的容器層,存儲驅(qū)動有 devicemapper、aufs、overlay、overlay2、btrfs、zfs 等,不同的存儲驅(qū)動實(shí)現(xiàn)方式有差異,鏡像組織形式可能也稍有不同,但都采用棧式存儲,并采用 Copy-on-Write(CoW) 策略。且存儲驅(qū)動采用熱插拔架構(gòu),可動態(tài)調(diào)整。那么,存儲驅(qū)動那么多,該如何選擇合適的呢?大致可從以下幾方面考慮:

Docker 容器其實(shí)是在鏡像的最上層加了一層讀寫層,通常也稱為容器層。在運(yùn)行中的容器里做的所有改動,如寫新文件、修改已有文件、刪除文件等操作其實(shí)都寫到了容器層。容器層刪除了,最上層的讀寫層跟著也刪除了,改動自然也丟失了。若要持久化這些改動,須通過 docker commit [repository[:tag]] 將當(dāng)前容器保存成為一個新鏡像。若想將數(shù)據(jù)持久化,或是多個容器間共享數(shù)據(jù),需將數(shù)據(jù)存儲在 Docker volume 中,并將 volume 掛載到相應(yīng)容器中。

存儲驅(qū)動決定了鏡像及容器在文件系統(tǒng)中的存儲方式及組織形式,下面分別對常見的 aufs、overlay 作一簡單介紹。

AUFS

AUFS 簡介

AUFS 是 Debian (Stretch 之前的版本,Stretch默認(rèn)采用 overlay2) 或 Ubuntu 系統(tǒng)上 Docker 的默認(rèn)存儲驅(qū)動,也是 Docker 所有存儲驅(qū)動中最為成熟的。具有啟動快,內(nèi)存、存儲使用高效等特點(diǎn)。如果使用的 Linux 內(nèi)核版本為 4.0 或更高,且使用的是 Docker CE,可考慮使用overlay2 (比 AUFS 性能更佳)。

配置 AUFS 存儲驅(qū)動

① 驗(yàn)證內(nèi)核是否支持 AUFS

  1. $ grep aufs /proc/filesystems 
  2. nodev aufs 

② 若內(nèi)核支持,可在 docker 啟動時通過指定參數(shù) –storage-driver=aufs 選擇 AUFS

AUFS 存儲驅(qū)動工作原理

采用 AUFS 存儲驅(qū)動時,有關(guān)鏡像和容器的所有層信息都存儲在/var/lib/docker/aufs/ 目錄下,下面有三個子目錄:

[[231662]]

采用 AUFS 后容器如何讀寫文件?

讀文件

容器進(jìn)行讀文件操作有以下三種場景:

1.容器層不存在: 要讀取的文件在容器層中不存在,存儲驅(qū)動會從鏡像層逐層向下找,多個鏡像層中若存在同名文件,上層的有效。

2.文件只存在容器層:讀取容器層文件

3.容器層與鏡像層同時存在:讀取容器層文件

修改文件或目錄

容器中進(jìn)行文件的修改同樣存在三種場景:

***次寫文件:若待修改的文件在某個鏡像層中,aufs 會先執(zhí)行 copy_up 操作將文件從只讀的鏡像層拷貝到可讀寫的容器層,然后進(jìn)行修改。在文件非常大的情況下效率比較低下。

刪除文件:刪除文件時,若文件在鏡像層,其實(shí)是在容器層創(chuàng)建一個特殊的 writeout 文件,容器層訪問不到,并沒有實(shí)際刪掉。

目錄重命名:目前 AUFS 還不支持目錄重命名。

OverlayFS

OverlayFS 簡介

OverlayFS 是一種類似 AUFS 的現(xiàn)代聯(lián)合文件系統(tǒng),但實(shí)現(xiàn)更簡單,性能更優(yōu)。OverlayFS 嚴(yán)格說來是 Linux 內(nèi)核的一種文件系統(tǒng),對應(yīng)的 Docker 存儲驅(qū)動為 overlay 或者 overlay2,overlay2 需 Linux 內(nèi)核 4.0 及以上,overlay 需內(nèi)核 3.18 及以上。且目前僅 Docker 社區(qū)版支持。條件許可的話,盡量使用 overlay2,與 overlay 相比,它的 inode 利用率更高。

容器如何使用 overlay/overlay2 讀寫文件

讀文件

讀文件存在以下三種場景:

1.文件不存在容器層:若容器要讀的文件不在容器層,會繼續(xù)從底層的鏡像層找

2.文件僅在容器層:若容器要讀的文件在容器層,直接讀取,不用在底層的鏡像層查找

3.文件同時在容器層和鏡像層:若容器要讀的文件在容器層和鏡像層中都存在,則從容器層讀取

修改文件或目錄

寫文件存在以下三種場景:

1.***寫文件:若要寫的文件位于鏡像層中,則執(zhí)行 copy_up 將文件從鏡像層拷貝至容器層,然后進(jìn)行修改,并在容器層保存一份新的。若文件較大,效率較低。OverlayFS 工作在文件級別而不是塊級別,這意味著即使對文件稍作修改且文件很大,也須將整個文件拷貝至容器層進(jìn)行修改。但需注意的是,copy_up 操作僅發(fā)生在***,后續(xù)對同一文件進(jìn)行修改,操作容器層文件即可

2.刪除文件或目錄:容器中刪除文件或目錄時,其實(shí)是在容器中創(chuàng)建了一個 writeout 文件,并沒有真的刪除文件,只是使其對用戶不可見

3.目錄重命名:僅當(dāng)源路徑與目標(biāo)路徑都在容器層時,調(diào)用 rename(2) 函數(shù)才成功,否則返回 EXDEV

遠(yuǎn)程鏡像倉庫如何存儲鏡像?

不少人可能經(jīng)常使用 docker,那么有沒有思考過鏡像推送至遠(yuǎn)程鏡像倉庫,是如何保存的呢?Docker 客戶端是如何與遠(yuǎn)程鏡像倉庫交互的呢?

我們平時本地安裝的 docker 其實(shí)包含兩部分:docker client 與 docker engine,docker client 與 docker engine 間通過 API 進(jìn)行通信。Docker engine 提供的 API 大致有認(rèn)證、容器、鏡像、網(wǎng)絡(luò)、卷、swarm 等,具體調(diào)用形式請參考:Docker Engine API。

Docker engine 與 registry (即:遠(yuǎn)程鏡像倉庫)的通信也有一套完整的 API,大致包含 pull、push 鏡像所涉及的認(rèn)證、授權(quán)、鏡像存儲等相關(guān)流程,具體請參考:Registry API。目前常用 registry 版本為 v2,registry v2 擁有斷點(diǎn)續(xù)傳、并發(fā)拉取鏡像多層等特點(diǎn)。能并發(fā)拉取多層是因?yàn)殓R像的元信息與鏡像層數(shù)據(jù)分開存儲,當(dāng) pull 一個鏡像時,先進(jìn)行認(rèn)證獲取到 token 并授權(quán)通過,然后獲取鏡像的 manifest 文件,進(jìn)行 signature 校驗(yàn)。校驗(yàn)完成后,依據(jù) manifest 里的層信息并發(fā)拉取各層。其中 manifest 包含的信息有:倉庫名稱、tag、鏡像層 digest 等, 更多,請參考:manifest 格式文檔。

各層拉下來后,也會先在本地進(jìn)行校驗(yàn),校驗(yàn)算法采用 sha256。Push 過程則先將鏡像各層并發(fā)推至 registry,推送完成后,再將鏡像的 manifest 推至 registry。Registry 其實(shí)并不負(fù)責(zé)具體的存儲工作,具體存儲介質(zhì)根據(jù)使用方來定,registry 只是提供一套標(biāo)準(zhǔn)的存儲驅(qū)動接口,具體存儲驅(qū)動實(shí)現(xiàn)由使用方實(shí)現(xiàn)。

目前官方 registry 默認(rèn)提供的存儲驅(qū)動包括:微軟 azure、Google gcs、Amazon s3、Openstack swift、阿里云 oss、本地存儲等。若需要使用自己的對象存儲服務(wù),則需要自行實(shí)現(xiàn) registry 存儲驅(qū)動。網(wǎng)易云目前將鏡像存儲在自己的對象存儲服務(wù) nos 上,故專門針對 nos 實(shí)現(xiàn)了一套存儲驅(qū)動,另外認(rèn)證服務(wù)也對接了網(wǎng)易云認(rèn)證服務(wù),并結(jié)合自身業(yè)務(wù)實(shí)現(xiàn)了一套認(rèn)證、授權(quán)邏輯,并有效地限制了倉庫配額。

Registry 干的事情其實(shí)很簡單,大致可分為:① 讀配置 ;② 注冊 handler ;③ 監(jiān)聽。本質(zhì)上 registry 是個 HTTP 服務(wù),啟動后,監(jiān)聽在配置文件設(shè)定的某端口上。當(dāng) http 請求過來后,便會觸發(fā)之前注冊過的 handler。Handler 包含 manifest、tag、blob、blob-upload、blob-upload-chunk、catalog 等六類,具體請可參考 registry 源碼: /registry/handlers/app.go:92。配置文件包含監(jiān)聽端口、auth 地址、存儲驅(qū)動信息、回調(diào)通知等。

責(zé)任編輯:武曉燕 來源: talkwithtrend
相關(guān)推薦

2017-10-12 10:28:48

Docker鏡像存儲

2014-11-27 09:59:02

dockerlinux技巧

2024-01-10 09:48:52

Docker工具

2023-05-30 14:56:18

Docker開發(fā)容器

2025-05-27 01:00:00

2019-07-16 14:44:52

DockerMySQL操作系統(tǒng)

2018-03-27 08:59:47

容器化RDS存儲

2017-08-25 10:20:46

Docker容器機(jī)制

2021-06-18 06:12:37

docker scan鏡像漏洞Docker

2022-08-02 07:48:06

容器鏡像版本

2022-08-30 19:11:12

Docker虛擬化技術(shù)

2018-11-30 09:00:19

html5cssjavascript

2010-10-12 14:22:41

PHP異常機(jī)制

2023-05-09 07:34:25

Docker健康檢查方式

2019-10-16 16:33:41

Docker架構(gòu)語言

2021-12-12 22:20:47

Docker開發(fā)容器

2018-11-30 09:03:55

HTTP緩存Web

2011-07-01 10:07:22

VAAIVMware vSto

2024-12-18 08:02:09

2018-05-11 09:07:39

Docker存儲驅(qū)動
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产视频不卡一区 | 一级毛片视频免费观看 | 午夜成人免费视频 | 免费三级网站 | 国精产品一区一区三区免费完 | 久草网站 | 欧美激情一区二区三区 | 国产精品国产a | 有码一区| 日韩欧美网 | 中文字幕在线观看 | 99亚洲精品| 久久精品免费 | 中文字幕一区二区三区在线观看 | 欧美视频一区二区三区 | 日韩高清中文字幕 | 激情av在线 | 91一区二区三区在线观看 | 精品国产一区二区在线 | 久久精品国产一区二区三区不卡 | 午夜天堂精品久久久久 | 亚洲自拍偷拍免费视频 | 国产精品久久久久久模特 | 黄色毛片视频 | 国产农村妇女精品一区 | 99re在线视频精品 | 久久国产欧美日韩精品 | 国产a一区二区 | 国产精品综合久久 | 国产精品久久久久久久久久久久 | 国产亚洲成av人在线观看导航 | 日韩成人中文字幕 | 中文字幕一级毛片视频 | 国产精品高清一区二区三区 | 久久骚| 亚洲日日操 | 99综合网 | 精品美女久久久 | 亚洲二区在线 | 久久r久久 | 亚洲欧美日韩一区二区 |