Docker學習(13) 卷與持久化數(shù)據(jù)
卷與持久化數(shù)據(jù)——簡介
- 數(shù)據(jù)主要分為兩種:持久化和非持久化悴侵。
- 持久化:就是需要保持的數(shù)據(jù)页徐。希望自己的容器數(shù)據(jù)保存下來笼才,需要將數(shù)據(jù)存儲在卷上仲翎,卷與容器是解耦的壶辜∶踔郏可以獨立創(chuàng)建并管理卷,卷不與任何容器的生命周期綁定砸民,最終用戶可以刪除與卷關聯(lián)的容器抵怎,但是卷不會被刪除奋救。
- 非持久化:不需要保存的數(shù)據(jù),非持久化存儲自動創(chuàng)建反惕,從屬于容器尝艘,生命周期與容器相連,刪除容器就是刪除全部非持久化數(shù)據(jù)姿染。
卷與持久化數(shù)據(jù)——詳解
容器與非持久化數(shù)據(jù)
- 容器擅長無狀態(tài)和非持久化事務
- 容器被自動分配本地存儲背亥,容器的全部文件和文件系統(tǒng)一般都保存在/var/lib/docker/overlay2/目錄下
- 默認情況下,容器的所有存儲都使用的本地存儲悬赏。
容器和持久化數(shù)據(jù)
- 容器持久化的方式使用卷
- 用戶先創(chuàng)建卷然后創(chuàng)建容器狡汉。接著卷掛載到容器上。
- 卷與容器是非解耦的關系
創(chuàng)建和管理容器卷
- 創(chuàng)建名為myvol的新卷
$ docker volume create myvol
myvol
docker創(chuàng)建新卷采用的是內置的local驅動闽颇,本地卷只能被所在節(jié)點的容器使用
-d參數(shù)可以指定不同發(fā)熱驅動
一直有25中卷插件盾戴,涵蓋了塊存儲、文件存儲兵多、對象存儲等
- 塊存儲:相對性能較高尖啡,適合小塊數(shù)據(jù)的隨機訪問的負載
- 文件存儲:包含NFS和SMB協(xié)調的系統(tǒng),在高性能場景下表現(xiàn)優(yōu)異
- 對象存儲:適合較大且長期存儲剩膘、而且很少變更的二進制數(shù)據(jù)存儲衅斩。
- 查看卷
$ docker volume ls
DRIVER VOLUME NAME
local 1c7824e5eccb82556e165af9b773cb7a10b4aa3fdebec6ac767b1591cb292692
local counter-app-master_counter-vol
local d94305a95f6e318124ec41d23fbed8e3b948cbd4e2f11d6a0bfbaf1a91f19806
local myvol
- 查看卷myvol的詳細信息
$ docker volume inspect myvol
[
{
"CreatedAt": "2019-11-12T23:38:28+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myvol/_data",
"Name": "myvol",
"Options": {},
"Scope": "local"
}
]
- Driver和Scope都是lcoal ,說明卷使用默認的local驅動創(chuàng)建的怠褐,只能用于當前docker主機上的容器畏梆。
- Mountpoint說明卷位于主機的位置:"/var/lib/docker/volumes/myvol/_data"
- 使用命令docker container run 加上參數(shù)--flag將卷掛載到新的容器上
- 有兩只方式刪除docker卷:
- docker volume prune: 會刪除未裝入容器和服務的所有卷
- docker volume rm :可以刪除指定卷
- 兩個命令都不能刪除被容器和服務使用的卷。
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
1c7824e5eccb82556e165af9b773cb7a10b4aa3fdebec6ac767b1591cb292692
counter-app-master_counter-vol
d94305a95f6e318124ec41d23fbed8e3b948cbd4e2f11d6a0bfbaf1a91f19806
myvol
Total reclaimed space: 1.411kB
演示卷在容器和服務中使用
- 創(chuàng)建一個新的獨立容器惫搏,并掛載名為bizvol的卷
$ docker container run -dit --name voltainer \
> --mount source=bizvol,target=/vol \
> alpine
51d16820daca34d76fea43f2465aa546b67460381abd8ccbe84493075c05c5dc
及時系統(tǒng)中沒有bizvol的卷具温,也能運行成功。:
- 如果指定了docker已經(jīng)存儲的卷筐赔,docker會使用該卷
- 如果指定了不存在的卷,docker會創(chuàng)建一個卷
查看卷
$ docker volume ls
DRIVER VOLUME NAME
local bizvol
- exec連接到容器并想卷中寫入一部分數(shù)據(jù)
$ docker container exec -it voltainer sh
/ # echo "docker volume" > /vol/file.txt
/ # ls /vol/
file.txt
/ # cat /vol/file.txt
docker volume
- 刪除容器
$ docker container rm voltainer -f
voltainer
- 即使容器被刪除但是卷依然存在
~$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED $ docker volume ls
DRIVER VOLUME NAME
local bizvol
# ls /var/lib/docker/volumes/bizvol/_data/
file.txt
# cat /var/lib/docker/volumes/bizvol/_data/file.txt
docker volume
- 數(shù)據(jù)依然存儲
- 創(chuàng)建一個名為hellocat新的docker容器上揖铜,并bizvol掛載到該容器的/vol目錄下
docker container run -dit --name hellocat \
> --mount source=bizvol,target=/vol \
> alpine
41a4916cc809bde6037289660ae40bea47ee9406c7830c98e981bfc2d96206c6
# docker container exec -it hellocat sh
/ # cat /vol/file.txt
docker volume
在集群節(jié)點間共享存儲
- Docker能夠集成外部存儲系統(tǒng)茴丰,使集群間節(jié)點節(jié)點共享外部存儲。
卷與持久化數(shù)據(jù)——命令
docker volume create :創(chuàng)建新卷天吓,默認使用的local驅動贿肩,加-d參數(shù)指定不同驅動
docker volume ls :查看docker主機的全部卷
docker volume inspect: 查看卷的詳細信息
docker volume prune :刪除未被容器和服務使用的卷
docker volume rm:刪除指定卷