久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Docker 數(shù)據(jù)持久化Volume

 TestOps云層 2021-06-22

Docker鏡像是基于聯(lián)合文件系統(tǒng)(Union File System)的一種層式結(jié)構(gòu),,由一系列指令一步一步構(gòu)建出來,。

Docker鏡像被存儲在一系列的只讀層中。當(dāng)我們創(chuàng)建一個容器時,,Docker會讀取鏡像(只讀),,并在其頂部添加一層讀寫層。如果正在運(yùn)行中的容器修改了現(xiàn)有文件,,該文件將會被拷貝出底層的只讀層,,放到最頂層的讀寫層中。讀寫層中原來的舊版本文件(未被更改過的文件)仍然存在于鏡像中,。所以當(dāng)Docker容器被刪除后,,再基于原來的鏡像創(chuàng)建容器時,將創(chuàng)建一個沒有任何數(shù)據(jù)更改的容器,,在之前那個容器中的數(shù)據(jù)更改會丟失掉,。

為什么需要Volume

為了能夠持久化這些更改過的數(shù)據(jù),并且能夠很容易實(shí)現(xiàn)容器間共享數(shù)據(jù),,Docker提出了Volume的概念,。Volume是外部默認(rèn)的聯(lián)合文件系統(tǒng)或者是存在于宿主文件系統(tǒng)中正常的文件或文件夾。

數(shù)據(jù)卷可以帶來以下好處:

  • Volume可在容器之間共享或重用數(shù)據(jù),;

  • Volume的更改可以直接生效,;

  • Volume的生命周期一直持續(xù)到?jīng)]有容器使用它為止;

  • 對Volume操作不會影響到鏡像本身,;

  • Volume可以完成容器到宿主機(jī),、宿主機(jī)到容器以及容器到容器之間的數(shù)據(jù)共享。

Docker volume 有如下幾種形態(tài):

不使用 Docker volume

默認(rèn)情況下,,容器不使用任何 volume,此時,,容器的數(shù)據(jù)被保存在容器之內(nèi),,它只在容器的生命周期內(nèi)存在,會隨著容器的被刪除而被刪除,。當(dāng)然,,也可以使用 docker commit 命令將它持久化為一個新的鏡像,。

Data volume (數(shù)據(jù)卷)

一個 data volume 是容器中繞過 Union 文件系統(tǒng)的一個特定的目錄。它被設(shè)計用來保存數(shù)據(jù),,而不管容器的生命周期,。因此,當(dāng)你刪除一個容器時,,Docker 肯定不會自動地刪除一個volume,。有如下幾種方式來使用 data volume:

(1)使用 “-v 容器內(nèi)目錄” 形式

docker run -d -v /data centos /bin/bash


使用 docker inspect 命令可以看出,Docker 將本地一個 _data 目錄 mount 為容器內(nèi)的 data目錄了:

"Mounts": [

            {

                "Type": "volume",

                "Name": "b9697411cd69fde3b5fe471229fc02e70409f8e84edd3333765f441cfb5961f8",

                "Source": "/var/lib/docker/volumes/b9697411cd69fde3b5fe471229fc02e70409f8e84edd3333765f441cfb5961f8/_data",

                "Destination": "/data",

                "Driver": "local",

                "Mode": "",

                "RW": true,

                "Propagation": ""

            }

        ],

這種情況當(dāng)容器被刪除后,,

/var/lib/docker/volumes/b9697411cd69fde3b5fe471229fc02e70409f8e84edd3333765f441cfb5961f8/_data

目錄及其中的內(nèi)容都還會保留下來,,但是,新啟動的容器無法再使用這個目錄,,也就是說,,已有的數(shù)據(jù)不能自動地被重復(fù)使用了。

(2)使用 -v 來掛載一個主機(jī)上的目錄到容器的目錄

docker run -d -v /root/data:/data centos /bin/bash

主機(jī)上的目錄可以是一個本地目錄,,也可以在一個 NFS share 內(nèi),,或者在一個已經(jīng)格式化好了的塊設(shè)備上。

其實(shí)這種形式和第一種沒有本質(zhì)的區(qū)別,,容器內(nèi)對 /data的操作都會反映到主機(jī)上的  /root/data 目錄內(nèi),。只是,重新啟動容器時,,可以再次使用同樣的方式來將 /root/data 目錄掛載到新的容器內(nèi),,這樣就可以實(shí)現(xiàn)數(shù)據(jù)持久化的目標(biāo)。

使用 docker volume 命令

Docker 新版本中引入了 docker volume 命令來管理 Docker volume,。

(1)使用默認(rèn)的 'local’ driver 創(chuàng)建一個 volume

docker volume create --name myvolume

查看結(jié)果:

# docker volume inspect myvolume

[

    {

        "CreatedAt": "2021-04-09T18:39:05+08:00",

        "Driver": "local",

        "Labels": {},

        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data",

        "Name": "myvolume",

        "Options": {},

        "Scope": "local"

    }

]

(2)使用這個 volume

docker run -d --name mycentos -v myvolume:/data centos /bin/bash

結(jié)果將 myvulume 對應(yīng)的主機(jī)上的目錄掛載給容器內(nèi)的 /data 目錄,。

"Mounts": [

            {

                "Type": "volume",

                "Name": "myvolume",

                "Source": "/var/lib/docker/volumes/myvolume/_data",

                "Destination": "/data",

                "Driver": "local",

                "Mode": "z",

                "RW": true,

                "Propagation": ""

            }

        ],

刪除 volume

可以使用 docker rm -v 命令在刪除容器時刪除該容器的卷。

docker rm -vf mycentos

批量刪除volume

從上面的介紹可以看出,,使用 docker run -v 啟動的容器被刪除以后,,在主機(jī)上會遺留下來孤單的卷??梢允褂孟旅娴暮唵畏椒▉碜銮謇恚?/p>

docker volume rm $(docker volume ls -qf dangling=true)

微信號 : TestOps

知乎:@TestOps云層

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多