首發(fā):arppinging.com
站在用戶的角度思考問題,與客戶深入溝通,找到婺源網(wǎng)站設(shè)計(jì)與婺源網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋婺源地區(qū)。Docker 入門之存儲(chǔ)卷一、Docker中的文件二、存在的問題和解決方案1)存在的問題2)解決方案三、什么是docker存儲(chǔ)卷?1)概述2)卷(volume)的特點(diǎn)3)卷的類型(volume types)四、使用docker存儲(chǔ)卷(volume)1)docker-managed volume2)bind mount volume3)復(fù)制使用其他容器的卷
首先我們需要回顧一下之前的內(nèi)容:
1、docker鏡像由多個(gè)層疊加而成,啟動(dòng)容器時(shí),docker會(huì)加載只讀鏡像層,并在鏡像棧頂部添加一個(gè)讀寫層。
2、如果運(yùn)行中的容器修改了現(xiàn)有的一個(gè)已經(jīng)存在的文件,那該文件會(huì)從只讀層復(fù)制到讀寫層,該文件的只讀版本仍然存在,只是已經(jīng)被讀寫層中該文件的副本所隱藏,此即“寫時(shí)復(fù)制(COW)”機(jī)制。
docker中的文件通俗來講:容器是分層的,最上面一層是可讀寫層,對(duì)所有數(shù)據(jù)的修改,都是保存在最上層的;在運(yùn)行容器之后,所有的操作都不會(huì)影響到鏡像本身,如果是編輯操作,那么docker只會(huì)從只讀層將文件復(fù)制(非移動(dòng))到讀寫層給用戶進(jìn)行編輯。
1、當(dāng)用戶關(guān)閉和重啟容器時(shí),容器中的數(shù)據(jù)不受影響,但刪除容器,則其數(shù)據(jù)會(huì)全部丟失。
2、數(shù)據(jù)存儲(chǔ)在聯(lián)合文件系統(tǒng)中,不易于宿主機(jī)訪問。
3、容器間數(shù)據(jù)共享不便
4、容器寫入和更改數(shù)據(jù)效率低,部分文件需要從底層復(fù)制,不適合IO較高的應(yīng)用。
“卷”是容器一個(gè)或多個(gè)“目錄”,此次類目錄可繞過聯(lián)合文件系統(tǒng),于宿主機(jī)上的目錄“綁定(關(guān)聯(lián))”
目錄綁定將宿主機(jī)的目錄直接于容器中的目錄進(jìn)行綁定,容器向目錄寫入數(shù)據(jù)時(shí),可以直接寫入宿主機(jī)的目錄中。這樣容器內(nèi)的數(shù)據(jù)保存時(shí)就能繞過容器內(nèi)部文件系統(tǒng)的限制,與宿主機(jī)的文件系統(tǒng)建立關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)數(shù)據(jù)共享,容器被停止或者刪除時(shí),數(shù)據(jù)不會(huì)丟失。
1、volume于容器初始化之時(shí)即會(huì)創(chuàng)建,由base image提供的卷中的數(shù)據(jù)會(huì)在此期間完成復(fù)制。(例:將宿主機(jī)上/data/docker/b1 和 容器b1中的/etc/綁定,那么會(huì)將容器中/etc/的內(nèi)容復(fù)制到宿主機(jī)/dta/docker/b1/目錄中)
2、volume的初衷是獨(dú)立于容器的生命周期實(shí)現(xiàn)數(shù)據(jù)持久化,因此刪除容器之時(shí)即不會(huì)刪除卷,也不會(huì)對(duì)哪怕未被引用的卷做垃圾回收操作。
3、volume為docker提供了獨(dú)立于容器的數(shù)據(jù)管理機(jī)制
(可以把”鏡像“想象為靜態(tài)文件,例如”程序“,把”卷“類比為動(dòng)態(tài)內(nèi)容,例如”數(shù)據(jù)“;于是,鏡像可以被重用,而卷可以被共享;卷實(shí)現(xiàn)了”程序(鏡像)“和”數(shù)據(jù)(卷)“的分離,用戶制作鏡像時(shí)無需再考慮鏡像運(yùn)行的容器所在的環(huán)境)
docker 有兩種類型的卷,每種類型都在容器中存在一個(gè)掛載點(diǎn),但其在宿主機(jī)上的位置有所不同
3.1 bind mount volume(綁定掛載卷)
a volume that points to a user-specified location on the host file system
3.2 docker-manged volume(docker 管理卷)
the docker daemon creates managed volumes in a portion of the host's file system that's system that's owned by docker
兩種類型的卷bind mount volume:指定綁定的路徑
docker-managed volume:宿主機(jī)的路徑由docker daemon定義
無論是哪種類型的卷,都使用docker run的-v參數(shù)。
1.1 創(chuàng)建容器b1,指定b1的/data/目錄使用存儲(chǔ)卷
[root@localhost ~]# docker run --name b1 -it -v /data busybox
/ # cd /data/
/data # ls
/data #
1.2 查看關(guān)聯(lián)的宿主機(jī)目錄
[root@localhost b1]# docker inspect -f {{.Mounts}} b1
[{volume 4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177 /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data /data local true }]
[root@localhost b1]#
1.3 在宿主機(jī)目錄中寫入文件
[root@localhost b1]# cd /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data/
[root@localhost _data]# echo 'welcome to arppinging.com' >> test.txt
[root@localhost _data]# cat test.txt
welcome to arppinging.com
[root@localhost _data]#
1.4 在容器b1中查看是否有test.txt文件
/data # cat /data/test.txt
welcome to arppinging.com
/data #
使用綁定掛載卷的時(shí)候,如果宿主機(jī)的目錄不存在,那么會(huì)自動(dòng)創(chuàng)建該目錄。
1.1 創(chuàng)建容器b2,配置宿主機(jī)的/data/docker/b2/與容器b2的/data/關(guān)聯(lián)
[root@localhost ~]# docker run --name b2 -it -v /data/docker/b2:/data busybox
/ # ls /data/
/ #
1.2 查看b2的關(guān)聯(lián)目錄
[root@localhost _data]# docker inspect -f {{.Mounts}} b2
[{bind /data/docker/b2 /data true rprivate}]
[root@localhost _data]#
1.3 在b2的/data/中創(chuàng)建一個(gè)文件,
/ # cd /data/
/data # echo 'welcome to b2.arppinging.com' > b2.html
/data #
1.4 在宿主機(jī)的/data/docker/b2中是否能看到b2創(chuàng)建的文件?
[root@localhost /]# cd /data/docker/b2/
[root@localhost b2]# ls
b2.html
[root@localhost b2]# cat b2.html
welcome to b2.arppinging.com
[root@localhost b2]#
1.5 刪除容器b2,查看宿主機(jī)的目錄文件是否還存在
[root@localhost ~]# docker rm b2
b2
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec2ff6aeb48a busybox "sh" 10 minutes ago Exited (0) 4 minutes ago b1
[root@localhost ~]#
[root@localhost ~]# cd /data/docker/b2/
[root@localhost b2]# cat b2.html
welcome to b2.arppinging.com
[root@localhost b2]#
復(fù)制和使用其他容器的卷,使用的是--volumes-from選項(xiàng)
創(chuàng)建一個(gè)容器b3,使用b1的存儲(chǔ)卷
[root@localhost b2]# docker run --name b3 -it --volumes-from b1 busybox
/ # cat /data/test.txt
welcome to arppinging.com
/ #
查看映射卷
[root@localhost b2]# docker inspect -f {{.Mounts}} b1
[{volume 4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177 /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data /data local true }]
[root@localhost b2]# docker inspect -f {{.Mounts}} b3
[{volume 4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177 /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data /data local true }]
[root@localhost b2]#
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。