性夜影院午夜看片,无码精品久久一区二区三区,婷婷成人丁香五月综合激情,校园春色 qvod,性调教室高h学校

Docker卷管理入門(mén)

數(shù)據(jù)卷

Docker的鏡像使用UFS(Uion File System),UFS雖適合于構(gòu)建和共享鏡像,但對(duì)于存儲(chǔ)持久數(shù)據(jù)或共享數(shù)據(jù)的需求來(lái)說(shuō),卷才是更好的選擇。簡(jiǎn)單來(lái)說(shuō),卷就是容器目錄樹(shù)上的一個(gè)用作掛載點(diǎn)的目錄,它用于掛載主機(jī)目錄樹(shù)上的某個(gè)目錄,換句話講,卷并非UFS的目錄樹(shù),而是綁定的主機(jī)上的某目錄樹(shù)。事實(shí)上,卷是獨(dú)立于容器生命周期之外的用于數(shù)據(jù)分段及共享的組件。

Docker卷管理入門(mén)

實(shí)踐中,鏡像文件保存了各種靜態(tài)數(shù)據(jù),例如應(yīng)用程序本身,而卷則保存各種動(dòng)態(tài)數(shù)據(jù),例如應(yīng)用程序處理或生成的數(shù)據(jù)。如此一來(lái),卷的引入可以使得容器和數(shù)據(jù)相分離,從而構(gòu)建出一個(gè)模塊化結(jié)構(gòu),并實(shí)現(xiàn)了類似“多態(tài)”的模型——基于同一個(gè)鏡像運(yùn)行的容器可以處理不同的數(shù)據(jù)。

卷類型

Docker支持兩種類型的卷,一種為“Docker管理卷(Docker-managed volumes)”,創(chuàng)建時(shí)僅需要指定容器中的掛載點(diǎn),主機(jī)上被綁定掛載的目錄由Docker進(jìn)程負(fù)責(zé)創(chuàng)建,這也是其名稱由來(lái)的原因;另一種是“綁定掛載卷(Bind mount volumes)”,創(chuàng)建時(shí)既要指定容器中的掛載點(diǎn),也要指定主機(jī)上的被掛載目錄。

Docker卷管理入門(mén)

Docker管理卷

由于主機(jī)上被綁定掛載的目錄是由Docker守護(hù)進(jìn)程管理,因此,在運(yùn)行docker run或docker create命令時(shí)使用“-v CONTAINER_DIR”選項(xiàng)即可使用此類卷。例如:

~]# docker run -it --name c1 -h container1 -v /data centos
[root@container1 /]# ls /data

而后在主機(jī)上運(yùn)行inspect命令來(lái)查看綁定的卷。在此示例中,容器中的/data/其實(shí)就是個(gè)映射到主機(jī)上的/var/lib/docker/volumes/cb2f80b99fcb201255b365c727f2856fec44ea1b00143f46ebd2f13f77e82543/_data目錄的鏈接,如下所示。

~]# docker inspect -f "{{.Mounts}}" c1
[{cb2f80b99fcb201255b365c727f2856fec44ea1b00143f46ebd2f13f77e82543 /var/lib/docker/volumes/cb2f80b99fcb201255b365c727f2856fec44ea1b00143f46ebd2f13f77e82543/_data /data local  true }]

此時(shí),在主機(jī)上的/var/lib/docker/volumes/cb2f80b99fcb201255b365c727f2856fec44ea1b00143f46ebd2f13f77e82543/_data目錄中創(chuàng)建的文件,可直接通過(guò)容器的/data/路徑進(jìn)行訪問(wèn)。例如,在主機(jī)上創(chuàng)建文件:

~]# touch /var/lib/docker/volumes/cb2f80b99fcb201255b365c727f2856fec44ea1b00143f46ebd2f13f77e82543/_data/testfile

而后,在容器中查看。

[root@container1 /]# ls /data/
testfile

需要注意的是,如果為docker rm命令刪除容器時(shí)不會(huì)刪除其卷在主機(jī)上綁定的目錄,除非使用了-v選項(xiàng)。

綁定掛載卷

與Docker管理卷僅有的不同是,綁定掛載卷(后面簡(jiǎn)稱綁定卷)需要用戶在指定容器中掛載點(diǎn)的同時(shí),指定主機(jī)上某事先存的被掛載目錄,其選項(xiàng)使用格式為“-v HOST_DIR:CONTAINER_DIR”。例如,綁定容器中的/data至主機(jī)上的/data/web/shop:

~]# docker run -it --name c2 -h container2 -v /data/web/shop:/data centos 
[root@container2 /]#

在主機(jī)上查看綁定的結(jié)果:

~]# docker inspect -f "{{.Mounts}}" c2
[{ /data/web/shop /data   true rprivate}]

刪除此類容器時(shí),卷在主機(jī)上綁定的相關(guān)目錄不會(huì)被刪除,即使使用了-v選項(xiàng)也不成。

~]# docker stop c2
~]# docker rm -v c2
]# ls -ld /data/web/shop/
drwxr-xr-x 2 root root 6 Mar 18 23:59 /data/web/shop/

另外,此種類型的卷不僅可以綁定目錄,也可以綁定文件,不過(guò)主機(jī)一側(cè)的文件需要事先存在,否則,Docker會(huì)將其理解為目錄,并自動(dòng)創(chuàng)建之。

~]# docker run -it --name c3 -h container3 -v /etc/issue:/tmp/issue centos
[root@container3 /]# cat /tmp/issue
S
Kernel r on an m

共享卷

上述第二種方式中的“-v HOST_DIR:CONTAINER_DIR”選項(xiàng)常用于在主機(jī)和一個(gè)或多個(gè)容器間共享數(shù)據(jù)。例如,需要讓兩個(gè)容器訪問(wèn)同一組數(shù)據(jù)時(shí),只需要將容器中的路徑綁定至主機(jī)上的同一個(gè)目錄即可。

~]# docker run --rm -it --name c1 -h container1 -v /tmp/doc:/doc centos 
[root@container1 /]# cp /etc/hosts /doc/
~]# docker run --rm -it --name c2 -h container2 -v /tmp/doc:/doc centos
[root@container2 /]# cat /doc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    container1

另外,docker run命令在啟動(dòng)容器時(shí),也可以使用“--volumes-from <CONTAINER>”選項(xiàng)來(lái)訪問(wèn)(復(fù)制)指定的容器的卷,例如:

~]# docker run --rm -it --name c1 -h container1 -v /tmp/doc:/doc centos
[root@container1 /]# cp /etc/hosts /doc/
~]# docker run --rm -it --name c2 -h container2 --volumes-from c1 centos
[root@container2 /]# ls /doc/
hosts
[root@container2 /]# cat /doc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    container1

查看新創(chuàng)建的容器c2的卷,可以發(fā)現(xiàn),其復(fù)制了--volumes-from選項(xiàng)中指定的容器的卷定義。

[root@docker ~]# docker inspect -f "{{.Mounts}}" c2
[{ /tmp/doc /doc   true rprivate}]

實(shí)踐中,如果一容器存在的惟一目的是為其它容器提供共享數(shù)據(jù)的話,此容器即為“數(shù)據(jù)容器(data containers)”。這么做的主要好處在于為其它容器提供一個(gè)易于掌控的卷名稱空間,并有助于容器遷移。

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!