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

Docker容器Container鏡像Image如何存儲(chǔ)詳解

 更新時(shí)間:2023年09月26日 14:11:37   作者:Mr_csc  
本文主要介紹Docker容器(Container)和鏡像(Image)是如何進(jìn)行數(shù)據(jù)存儲(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

容器如何讀寫(xiě)文件

鏡像(Image)是由若干個(gè)層(Layer)所組成的,當(dāng)用戶(hù)使用image運(yùn)行了一個(gè)container之后,就會(huì)在這個(gè)image的最上面再加上一個(gè)可讀可寫(xiě)的layer,如下圖所示:

除了最上面那一個(gè)layer是可讀寫(xiě)的之外,下面的所有l(wèi)ayer都是屬于image的,都是只讀的。

在container運(yùn)行時(shí),任何在container文件系統(tǒng)中寫(xiě)入和修改的數(shù)據(jù)都會(huì)被寫(xiě)入到最上層的可讀寫(xiě)layer(這里不包括volume、bind mount和tmpfs這些持久化存儲(chǔ)手段),并不會(huì)影響到下面的那些只讀layer。當(dāng)container運(yùn)行結(jié)束的時(shí)候,最上層的可讀寫(xiě)layer就會(huì)被丟棄,而下面的那些只讀layer是屬于image的,并不會(huì)受到影響。

這也就是為什么使用同一個(gè)image運(yùn)行container,該container結(jié)束之后,重新使用該image啟動(dòng)一個(gè)新的container,上一個(gè)container寫(xiě)入和修改的數(shù)據(jù)全都不見(jiàn)了,用戶(hù)能看見(jiàn)的依舊是當(dāng)初編寫(xiě)Dockerfile時(shí)寫(xiě)入該image的那些數(shù)據(jù)的原因。

如果使用同一個(gè)image啟動(dòng)了多個(gè)container,那么這些container會(huì)有各自的最上層的可讀寫(xiě)layer,但是下面的那些只讀layer是共用的,如下圖所示:

鏡像的layer管理

一個(gè)image的多個(gè)layer并不是綁定和存儲(chǔ)在一起的,它們之間是低耦合的。

使用docker pull命令拉取一個(gè)image的時(shí)候,并不是一次性拉取的,而是一個(gè)layer一個(gè)layer地拉取,然后存儲(chǔ)在本機(jī)(在linux上默認(rèn)是/var/lib/docker/<storage-driver>/下)。

一臺(tái)主機(jī)中存在多個(gè)image時(shí),有可能會(huì)出現(xiàn)多個(gè)image的某些layer相同的情況,那么此時(shí)在主機(jī)中就只會(huì)存儲(chǔ)一份該layer,而不是存儲(chǔ)多個(gè)。

那么問(wèn)題來(lái)了:既然多個(gè)layer是分開(kāi)存儲(chǔ)的,那么用戶(hù)在container中卻可以看到所有的layer中存儲(chǔ)的文件,這又是怎么做到的呢?這就涉及到了union file system和union mount。

可以通過(guò)docker image history以及docker image inspect來(lái)查看某個(gè)image的所有l(wèi)ayer。

Copy On Write

當(dāng)container想要更改原本就存在于image中的那些數(shù)據(jù)的時(shí)候該怎么辦呢?那些數(shù)據(jù)是位于下面那些屬于image的只讀層的,因此肯定不能直接修改。Docker采用的解決方案一般是copy-on-write。

當(dāng)container想要讀取原本就存在于image中的數(shù)據(jù)時(shí),直接從數(shù)據(jù)所在的只讀layer讀取即可。而如果想要修改原本就存在于image中的數(shù)據(jù)時(shí),Docker就會(huì)先把要被修改的文件拷貝到最上層的屬于container的可讀寫(xiě)layer中,然后再在這個(gè)可讀寫(xiě)的layer中進(jìn)行數(shù)據(jù)的修改即可。

值得一提的是,哪怕是對(duì)文件的元數(shù)據(jù)(meta data)的修改(例如修改文件權(quán)限、所屬用戶(hù)等等),也會(huì)觸發(fā)copy-on-write機(jī)制。

Docker有多種存儲(chǔ)引擎(storage driver),不同的storage driver對(duì)copy-on-write的具體實(shí)現(xiàn)是不一樣的。

注意:并不是所有的Docker存儲(chǔ)引擎都支持copy on write的,例如vfs就不支持!

查看容器占用磁盤(pán)大小

使用docker ps -s來(lái)查看一個(gè)container在運(yùn)行時(shí)占用的磁盤(pán)大小,例如:

SIZE指的是該container最上層的可讀寫(xiě)layer的大小,而virtual指的是啟動(dòng)了該container的image的那些只讀layer的大小。
需要注意的是,通過(guò)這個(gè)命令得到的container磁盤(pán)空間大小是不包括以下這些的:

  • log文件所使用的磁盤(pán)空間
  • volume和bind mount所使用的磁盤(pán)空間
  • container的配置文件所使用的磁盤(pán)空間
  • 內(nèi)存交換所使用的磁盤(pán)空間
  • Checkpoints所使用的磁盤(pán)空間

Docker存儲(chǔ)引擎

Docker在linux下提供了如下的存儲(chǔ)引擎選項(xiàng):

存儲(chǔ)引擎描述
overlay2在linux上首選的存儲(chǔ)引擎,不需要額外的配置
fuse-overlayfs推薦在運(yùn)行rootless的Docker時(shí)使用
btrfs和zfs可以提供更多的功能,例如快照等等,但是需要額外的配置
vfs目前仍處于測(cè)試中,用于不支持copy on write的文件系統(tǒng)中,性能堪憂(yōu),不推薦使用在生產(chǎn)環(huán)境中
devicemapper在生產(chǎn)環(huán)境中需要direct-lvm的支持

可以通過(guò)docker info命令來(lái)查看自己使用的Docker用的是哪一個(gè)storage driver:

上圖中使用的storage driver是overlay2。

參考資料 https://docs.docker.com/storage/storagedriver/

以上就是Docker容器Container鏡像Image如何存儲(chǔ)詳解的詳細(xì)內(nèi)容,更多關(guān)于Docker容器鏡像存儲(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • docker打包前端鏡像的超詳細(xì)步驟

    docker打包前端鏡像的超詳細(xì)步驟

    要打包前端項(xiàng)目可以使用 Docker 容器技術(shù),下面這篇文章主要給大家介紹了關(guān)于docker打包前端鏡像的超詳細(xì)步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Docker下SqlServer發(fā)布訂閱啟用的方法

    Docker下SqlServer發(fā)布訂閱啟用的方法

    發(fā)布訂閱主要用來(lái)做數(shù)據(jù)庫(kù)的讀寫(xiě)分離,當(dāng)單臺(tái)數(shù)據(jù)庫(kù)的壓力太大時(shí),可以考慮這種方案,本文主要介紹了Docker下SqlServer發(fā)布訂閱啟用的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Docker實(shí)踐--部署Nodejs應(yīng)用

    Docker實(shí)踐--部署Nodejs應(yīng)用

    本篇文章主要介紹了Docker實(shí)踐--部署Nodejs應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法

    Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法

    這篇文章主要介紹了Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-04-04
  • Linux下Docker安裝配置教程

    Linux下Docker安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Linux下Docker安裝配置教程,步驟簡(jiǎn)單清晰,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 如何使用Celery和Docker處理Django中的定期任務(wù)

    如何使用Celery和Docker處理Django中的定期任務(wù)

    這篇文章主要介紹了使用Celery和Docker處理Django中的定期任務(wù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringCloud與Docker的集成原理解析

    SpringCloud與Docker的集成原理解析

    Docker的核心原理是通過(guò)將應(yīng)用程序及其所有依賴(lài)項(xiàng)封裝到獨(dú)立的容器中,實(shí)現(xiàn)了跨平臺(tái)、一致性和可移植性,這篇文章主要介紹了SpringCloud-Docker原理解析,需要的朋友可以參考下
    2024-02-02
  • Docker+Jupyter 部署算力服務(wù)的解決方案

    Docker+Jupyter 部署算力服務(wù)的解決方案

    Docker+Jupyter部署算力服務(wù)為AI學(xué)習(xí)框架提供了一種高效的發(fā)布和使用方案,本文以Windows環(huán)境為例,介紹了如何下載安裝Docker工具,以及如何根據(jù)AI框架所需的Python版本拉取合適的Jupyter鏡像,本文介紹了Docker+Jupyter 部署算力服務(wù)的相關(guān)知識(shí),一起看看吧
    2024-11-11
  • 基于docker Desktop一鍵式搭建k8s環(huán)境的步驟

    基于docker Desktop一鍵式搭建k8s環(huán)境的步驟

    在docker desktop中一鍵啟動(dòng)k8s環(huán)境很簡(jiǎn)單,下面介紹如何啟動(dòng)dashboard,dashboard儀表盤(pán)是新手學(xué)習(xí)k8s至關(guān)重要的一個(gè)工具,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2023-11-11
  • docker鏡像如何啟動(dòng)es/kibana

    docker鏡像如何啟動(dòng)es/kibana

    這篇文章主要介紹了docker鏡像如何啟動(dòng)es/kibana問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論