一哀卫、存儲
docker的鏡像使用一層一層文件組成的,docker的一些存儲引擎可以處理怎么樣存儲這些文件凉袱。使用docker inspect
這個(gè)命令可以查詢鏡像或者容器的詳細(xì)信息工三,比如要查看centos這個(gè)鏡像:
docker inspect centos
展示信息下方的Layers架谎,就是centos的文件诸狭,這些東西都是只讀的不能去修改飒硅,我們基于這個(gè)鏡像去創(chuàng)建的鏡像和容器也會共享這些文件層,而docker會在這些層上面去添加一個(gè)可讀寫的文件層作谚。如果需要修改一些文件層里面的東西的話,docker會復(fù)制一份到這個(gè)可讀寫的文件層里面庵芭,如果刪除容器的話妹懒,那么也會刪除它對應(yīng)的可讀寫的文件層的文件。
演示
先創(chuàng)建一個(gè)帶交互的容器双吆,管它名字叫test1眨唬。
docker run -i -t --name test1 centos /bin/bash
然后在里面新建一個(gè)文件,hello.txt好乐。
接著退出容器匾竿,使用centos創(chuàng)建第二個(gè)容器叫test2,試著輸出根目錄下的hello.txt文件的內(nèi)容蔚万。
發(fā)現(xiàn)沒有找到此文件岭妖,雖然test1,test2都是基于centos鏡像創(chuàng)建的,但他們都擁有各自的可讀寫的文件層昵慌,新創(chuàng)建的文件或者修改的已有的文件都會放到這個(gè)文件層假夺,不會影響到鏡像本身和使用這個(gè)鏡像創(chuàng)建的容器。
刪除容器的時(shí)候斋攀,這些容器層上面的文件也會被刪除掉已卷。
二、數(shù)據(jù)卷:Data Volumes
如果有些數(shù)據(jù)你想一直保存的話淳蔼,比如:web服務(wù)器上面的日志侧蘸,數(shù)據(jù)庫管理系統(tǒng)里面的數(shù)據(jù),那么我們可以把這些數(shù)據(jù)放到data volumes數(shù)據(jù)盤里面鹉梨。它上面的數(shù)據(jù)讳癌,即使把容器刪掉,也還是會永久保留俯画。創(chuàng)建容器的時(shí)候析桥,我們可以去指定數(shù)據(jù)盤。其實(shí)就是去指定一個(gè)特定的目錄艰垂,剩下的docker會幫你做泡仗。
指定數(shù)據(jù)盤的命令
docker run --volume /mnt -i -t --name db centos /bin/bash
說明:--volume
簡寫形式 -v
,指定數(shù)據(jù)盤的目錄猜憎,注意目錄是要絕對路徑娩怎。
創(chuàng)建容器,并在這容器的數(shù)據(jù)盤里創(chuàng)建一個(gè)文件胰柑。
查看容器信息:
Mounts下Source表示數(shù)據(jù)存在宿主機(jī)上的真實(shí)位置截亦,Destination表示數(shù)據(jù)盤在docker中對應(yīng)的位置。及時(shí)刪除容器柬讨,Source下的數(shù)據(jù)也還會存在崩瓤。
指定主機(jī)目錄作為數(shù)據(jù)盤
我們還可以手工指定主機(jī)上的目錄作為數(shù)據(jù)盤,比如踩官,新建一個(gè)文件夾叫data却桶,讓它作為數(shù)據(jù)盤,然后使用centos鏡像創(chuàng)建容器蔗牡,命名為db颖系,指定數(shù)據(jù)盤位置:
docker run -v /Users/beckjiang/Desktop/data:/mnt --name db -i -t centos /bin/bash
進(jìn)入容器后,在/mnt/ 目錄下創(chuàng)建文件data1辩越,然后刪除容器嘁扼,查看主機(jī)上/Users/beckjiang/Desktop/data 里面,仍然會保留容器里面創(chuàng)建的數(shù)據(jù)黔攒。
三趁啸、數(shù)據(jù)容器
我們可以創(chuàng)建一個(gè)數(shù)據(jù)容器强缘,也就是再創(chuàng)建容器是指定這個(gè)容器的數(shù)據(jù)盤,然后讓其他容器可以使用這個(gè)容器作為他們的數(shù)據(jù)盤莲绰,有點(diǎn)像繼承了這個(gè)數(shù)據(jù)容器指定的數(shù)據(jù)盤作為數(shù)據(jù)盤欺旧。
先來創(chuàng)建一個(gè)數(shù)據(jù)容器:
docker create -v /mnt -i -t --name dbcenter centos /bin/bash
接著使用這個(gè)數(shù)據(jù)容器,去創(chuàng)建一個(gè)容器 db1:
docker run --volumes-from dbcenter --name db1 -i -t centos bash
在/mnt/目錄下創(chuàng)建data1文件:
完成以后退出容器蛤签,基于dbcenter這個(gè)數(shù)據(jù)容器去創(chuàng)建第二個(gè)容器 db2:
docker run --volumes-from dbcenter --name db2 -i -t centos bash
查看/mnt/目錄下的文件辞友,會看到在db1容器中創(chuàng)建的data1文件。同樣的震肮,你在db2中的/mnt/目錄創(chuàng)建的數(shù)據(jù)文件称龙,也會被其他使用了dbcenter作為數(shù)據(jù)容器的容器所看到。
四戳晌、管理數(shù)據(jù)盤
查看主機(jī)上面創(chuàng)建的數(shù)據(jù)盤
docker volume ls
在刪除容器時(shí)鲫尊,docker默認(rèn)不會刪除其數(shù)據(jù)盤。這里可以** 查看沒有容器在使用的數(shù)據(jù)盤 **:
docker volume ls -f dangling=true
出現(xiàn)的就是沒有容器在使用的數(shù)據(jù)盤沦偎,想要** 刪除數(shù)據(jù)盤 **可以使用:
docker volume rm VOLUME NAME
把沒有容器使用的數(shù)據(jù)盤都刪除掉以后疫向,還剩下1個(gè)正在被使用的數(shù)據(jù)盤,就是上面創(chuàng)建的數(shù)據(jù)容器豪嚎。
如果想要?jiǎng)h除容器時(shí)搔驼,同時(shí)刪除掉其數(shù)據(jù)盤,那么可以使用-v
參數(shù)侈询。(db1舌涨,db2使用dbcenter作為數(shù)據(jù)盤,先將其刪掉)
docker rm -v dbcenter
因?yàn)閯h除容器也把數(shù)據(jù)盤給刪了扔字,所以執(zhí)行docker volume ls
囊嘉,數(shù)據(jù)盤為空。