學(xué)習(xí)完整課程請(qǐng)移步 互聯(lián)網(wǎng) Java 全棧工程師
本節(jié)視頻
概述
數(shù)據(jù)卷
是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄嵌削,它繞過(guò) UFS,可以提供很多有用的特性:
-
數(shù)據(jù)卷
可以在容器之間共享和重用 - 對(duì)
數(shù)據(jù)卷
的修改會(huì)立馬生效 - 對(duì)
數(shù)據(jù)卷
的更新尊浪,不會(huì)影響鏡像 -
數(shù)據(jù)卷
默認(rèn)會(huì)一直存在票腰,即使容器被刪除
注意:
數(shù)據(jù)卷
的使用城看,類(lèi)似于 Linux 下對(duì)目錄或文件進(jìn)行 mount,鏡像中的被指定為掛載點(diǎn)的目錄中的文件會(huì)隱藏掉杏慰,能顯示看的是掛載的數(shù)據(jù)卷
测柠。
選擇 -v 還是 -–mount 參數(shù)
Docker 新用戶(hù)應(yīng)該選擇 --mount
參數(shù)炼鞠,經(jīng)驗(yàn)豐富的 Docker 使用者對(duì) -v
或者 --volume
已經(jīng)很熟悉了,但是推薦使用 --mount
參數(shù)轰胁。
創(chuàng)建一個(gè)數(shù)據(jù)卷
$ docker volume create my-vol
查看所有的 數(shù)據(jù)卷
$ docker volume ls
local my-vol
在主機(jī)里使用以下命令可以查看指定 數(shù)據(jù)卷
的信息
$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
啟動(dòng)一個(gè)掛載數(shù)據(jù)卷的容器
在用 docker run
命令的時(shí)候谒主,使用 --mount
標(biāo)記來(lái)將 數(shù)據(jù)卷
掛載到容器里。在一次 docker run
中可以掛載多個(gè) 數(shù)據(jù)卷
赃阀。
下面創(chuàng)建一個(gè)名為 web
的容器瘩将,并加載一個(gè) 數(shù)據(jù)卷
到容器的 /webapp
目錄。
$ docker run -d -P \
--name web \
# -v my-vol:/wepapp \
--mount source=my-vol,target=/webapp \
training/webapp \
python app.py
查看數(shù)據(jù)卷的具體信息
在主機(jī)里使用以下命令可以查看 web
容器的信息
$ docker inspect web
數(shù)據(jù)卷
信息在 "Mounts" Key 下面
"Mounts": [
{
"Type": "volume",
"Name": "my-vol",
"Source": "/var/lib/docker/volumes/my-vol/_data",
"Destination": "/app",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
刪除數(shù)據(jù)卷
$ docker volume rm my-vol
數(shù)據(jù)卷
是被設(shè)計(jì)用來(lái)持久化數(shù)據(jù)的凹耙,它的生命周期獨(dú)立于容器,Docker 不會(huì)在容器被刪除后自動(dòng)刪除 數(shù)據(jù)卷
肠仪,并且也不存在垃圾回收這樣的機(jī)制來(lái)處理沒(méi)有任何容器引用的 數(shù)據(jù)卷
肖抱。如果需要在刪除容器的同時(shí)移除數(shù)據(jù)卷∫炀桑可以在刪除容器的時(shí)候使用 docker rm -v
這個(gè)命令意述。
無(wú)主的數(shù)據(jù)卷可能會(huì)占據(jù)很多空間,要清理請(qǐng)使用以下命令
$ docker volume prune