Docker 數(shù)據(jù)卷(Docker Volumes)是一個(gè)可供 Docker 容器使用的持久化數(shù)據(jù)存儲(chǔ)機(jī)制,其數(shù)據(jù)可以在容器之間共享和重用敦姻。數(shù)據(jù)卷有以下特點(diǎn):
- 數(shù)據(jù)卷可以與宿主機(jī)上的文件目錄或者另一個(gè)容器的文件系統(tǒng)掛載關(guān)聯(lián)二庵。
- 容器內(nèi)部的應(yīng)用程序可以非常方便地訪問數(shù)據(jù)卷里的數(shù)據(jù),就像訪問本地文件一樣。
- 即使容器被刪除蜜氨,數(shù)據(jù)卷本身不會(huì)被自動(dòng)刪除,因此可以實(shí)現(xiàn)數(shù)據(jù)持久化捎泻。
- 使用 Docker 數(shù)據(jù)卷可以方便地解決一些問題飒炎,例如:
- 容器之間需要共享一些數(shù)據(jù),可以使用同一個(gè)數(shù)據(jù)卷
- 當(dāng)多個(gè)容器運(yùn)行同一個(gè)應(yīng)用時(shí)笆豁,可以將應(yīng)用配置文件設(shè)置為一個(gè)數(shù)據(jù)卷郎汪,并掛載到每個(gè)容器中
- 打包 Docker 鏡像時(shí),大部分的數(shù)據(jù)可以放在數(shù)據(jù)卷中闯狱,而不是打進(jìn)鏡像中煞赢,這樣可以減小鏡像的大小
數(shù)據(jù)卷命令
數(shù)據(jù)卷操作的基本語法:
$ docker volume [command] ... # -- help 查詢
-
create:
創(chuàng)建一個(gè) volume 目錄 -
inspect:
顯示 一個(gè)或者多個(gè)voluem 詳細(xì)信息 -
ls:
volume 列表信息 -
prune:
刪除未使用的 volume, eq: docker volume prune -
rm:
刪除一個(gè)或者多個(gè)指定的 volume
數(shù)據(jù)卷掛載
方式1:將主機(jī)數(shù)據(jù)卷與容器掛載
在這種情況下,兩個(gè)容器將共享同一個(gè)數(shù)據(jù)卷容器哄孤,數(shù)據(jù)會(huì)被持久化保存并一直存在于容器間傳遞照筑。
$ docker run --name sonar \
-p 9000:9000 \
-v data:/opt/sonarqube/data \
-v logs:/opt/sonarqube/logs \
-v extensions:/opt/sonarqube/extensions \
-d \
sonarqube
命令解讀:
-
docker run:
創(chuàng)建并運(yùn)行容器
---name:
自定義容器名稱 -
-p:
宿主機(jī)端口映射 -
-v:
將主機(jī)中已創(chuàng)建的 data 數(shù)據(jù)卷掛載的容器內(nèi)的/opt/sonarqube/data 目錄 -
-d:
容器后臺(tái)運(yùn)行 -
sonarqube:
鏡像名稱
# 查看 data 數(shù)據(jù)卷掛載位置信息
$ docker volume inspect data
# 進(jìn)入掛載目錄 mountpoint
$ cd /var/lib/docker/volumes/soanrqube/data/_data
# 修改配置文件
$ vim xxx
方式2:將主機(jī)目錄與容器內(nèi)的目錄掛載
這種情況下,容器內(nèi)的數(shù)據(jù)會(huì)被持久化保存到主機(jī)上的特定目錄中瘦陈,即使容器被刪除凝危,數(shù)據(jù)也不會(huì)丟失.目錄掛載與數(shù)據(jù)卷掛載命令基本一致。
$ docker run --name sonar \
-p 9000:9000 \
-v tmp/sonarqube/data:/opt/sonarqube/data \ # 將主機(jī)目錄直接與容器內(nèi)的目錄掛載
-v tmp/sonarqube/logs:/opt/sonarqube/logs \
-v tmp/sonarqube/extensions:/opt/sonarqube/extensions \
-d \
sonarqube
以上兩種方式數(shù)據(jù)卷掛載與目錄掛載的區(qū)別不大晨逝,數(shù)據(jù)卷掛載是由docker管理目錄蛾默,只是目錄較深難找。目錄掛載則需要自定義目錄捉貌,便于查找趴生。
*方式3:使用網(wǎng)絡(luò)存儲(chǔ)驅(qū)動(dòng)程序掛載遠(yuǎn)程數(shù)據(jù)卷
可以使用網(wǎng)絡(luò)存儲(chǔ)驅(qū)動(dòng)程序?qū)⑦h(yuǎn)程主機(jī)上的目錄掛載為數(shù)據(jù)卷阀趴,以便容器可以訪問遠(yuǎn)程數(shù)據(jù)〔源遥可以通過如下命令來實(shí)現(xiàn):
docker run --mount type=volume,dst=/container/path,volume-driver=mydriver,readonly myimage
在linux系統(tǒng)中刘急,可以使用ls /
命令查看根目錄下的文件和目錄。以下是一些常見的目錄及其作用:
-
/bin
: 存放二進(jìn)制可執(zhí)行文件浸踩,用于系統(tǒng)啟動(dòng)和基本功能操作(如ls叔汁、cp、cat等)检碗。 -
/boot
: 存放系統(tǒng)啟動(dòng)所需的文件据块,包括內(nèi)核鏡像、ram磁盤映像(initramfs)和引導(dǎo)加載器(grub)等折剃。 -
/dev
: 存放設(shè)備文件另假,包括硬件設(shè)備和虛擬設(shè)備。 -
/etc
: 存放系統(tǒng)配置文件怕犁,包括網(wǎng)絡(luò)配置边篮、用戶賬戶、安裝軟件等奏甫。 -
/home
: 存放用戶主目錄戈轿。 -
/lib
: 存放庫(kù)文件,包括運(yùn)行時(shí)需要鏈接的應(yīng)用程序和共享庫(kù)阵子,例如libc庫(kù)思杯。 -
/media
: 存放可移動(dòng)介質(zhì),例如u盤和cd-rom挠进。 -
/mnt
: 臨時(shí)掛載點(diǎn)色乾,用于掛載其他文件系統(tǒng)。 -
/opt
: 存放第三方軟件安裝目錄 // 如: Jenkins领突、maven杈湾、sonarqube等 -
/proc
: 虛擬文件系統(tǒng),包含當(dāng)前運(yùn)行進(jìn)程信息攘须、系統(tǒng)狀態(tài)和硬件信息等漆撞。 -
/root
: root用戶的主目錄。 -
/run
: 存放系統(tǒng)運(yùn)行時(shí)需要的臨時(shí)文件(例如pid文件)于宙。 -
/sbin
: 存放超級(jí)用戶命令浮驳,包括重啟服務(wù)器或修改系統(tǒng)配置等等。 -
/srv
: 存放服務(wù)提供的相關(guān)文件捞魁,如http至会、ftp等。 -
/sys
: 虛擬文件系統(tǒng)谱俭,用于與linux內(nèi)核進(jìn)行交互的接口奉件。 -
/tmp
: 存放臨時(shí)文件宵蛀,保存在該目錄下的文件可能會(huì)在重啟后被刪除 // 一般放置安裝壓縮包 -
/usr
: 存放用戶的應(yīng)用程序和數(shù)據(jù) // 常用 -
var
: 用于存儲(chǔ)變化數(shù)據(jù)的目錄 // docker 容器的數(shù)據(jù)卷掛載一般放置在該目錄下