如何使用docker數據卷?

如何使用docker數據卷?

開始之前

如果你有一些需要持續更新的數據並且希望持久化數據,或者需要在不同的容器之間共享數據,再者需要主機與容器之間共享數據,那麼你可以使用數據捲來滿足這些需求。

數據卷定義

數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
數據卷可以在容器之間共享和重用。
對數據卷的修改會立馬生效。
數據卷默認會一直存在,即使容器被刪除。

使用數據卷

數據卷有兩種創建方式一是創建容器時創建數據卷,二是先創建好數據卷,在創建容器時掛載這個數據卷,兩種方式均可以。

  1. 創建一個數據卷
docker volume create demo-data
demo-data
  1. 創建容器使用-v(--volume)參數來掛載數據卷
docker run --name demo1 -d \
    -v demo-data:/var/www/html nginx:alpine
docker run --name demo2 -d \
    -v demo-data:/var/www/html nginx:alpine
  1. 列出數據卷
docker volume ls
DRIVER      VOLUME NAME
local       demo-data
  1. 查看數據卷詳細信息
docker volume inspect demo-data
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/demo-data/_data",
        "Name": "demo-data",
        "Options": {},
        "Scope": "local"
    }
]
  1. 刪除數據卷
docker volume rm demo-data
Error response from daemon: remove demo-data: volume is in use - [#省略..]

注意: 由於有容器正在使用數據卷,提示無法刪除數據卷。

測試數據卷

  1. 宿主機寫入數據
hostname > /var/lib/docker/volumes/demo-data/_data/hosts.txt

注意: 這個目錄對應創建的 demo-data 數據卷。

  1. 容器寫入數據
docker exec -ti demo1 sh -c 'hostname >> /var/www/html/hosts.txt'
docker exec -ti demo2 sh -c 'hostname >> /var/www/html/hosts.txt'
  1. 讀取數據
cat /var/lib/docker/volumes/demo-data/_data/hosts.txt 
node0
87c60cbe6147
a6bc3c00c790
  1. 刪除容器數據卷仍然保留
docker stop demo1 
docker stop demo2 
docker rm demo1
docker rm demo2

數據卷仍然存在

docker volume ls
DRIVER      VOLUME NAME
local       demo-data

如果需要可以使用 rm 選項刪除數據卷

docker volume rm demo-data

數據卷已不存在

docker volume inspect demo-data 
[]
Error: No such volume: demo-data

命令幫助

創建容器時掛載數據卷參數

docker run --help | grep '\-v,'
  -v, --volume list     Bind mount a volume

刪除容器時一併刪除數據卷參數(慎用)

 docker rm --help | grep '\-v'

  -v, --volumes   Remove the volumes associated with the container

數據卷管理命令

docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

小結

最後來總結下文章中的知識點

  • 數據卷 是被設計用來持久化數據的,它的生命週期獨立於容器,Docker 不會在
    容器被刪除後自動刪除數據卷 。
  • 如果需要在刪除容器的同時移除數據卷。可以在刪除容器
    的時候使用docker rm -v這個命令。

參考文章

doker&k8s Qun [703906133]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章