今天要說的是數據卷和數據卷容器。所謂的數據卷就像一個硬盤分區,可以掛載在容器上。
值得一提的地方:
- 數據卷一般不會在容器停止時自動被刪除
- 多個容器共享一個數據卷,則在一個容器裏對數據卷的操作會馬上反應在另外的容器,畢竟數據卷是一個。
- 數據卷容器其實不是把數據卷放在放在一個容器裏,而只是一個管理數據卷的工具。
- 數據卷與容器的關係如圖1, 數據容器如圖2
基本命令
sudo docker volume create #創建數據卷容器,返回數據卷ID
sudo docker volume create --name html #指定數據卷名字
sudo docker volume inspect $volume #查看數據卷$volume
sudo docker volume ls #查看所有數據卷
sudo docker create -v $volume $container #用參數 -v 在創建容器時掛載數據卷$volume
#數據卷不存在就自動新建數據卷,自動掛載
sudo docker create -v $volume_name:$volume_dest $container
#掛載數據卷$volume_name到容器$container的$volume_dest位置
#$volume_name 可以是宿主機絕對路徑的目錄,這樣就把宿主機目錄掛載到容器上
sudo docker volume rm $volume #刪除數據卷$volume,用id的話需要64位都寫全。如果有其他容器在使用該數據卷,則可能引發錯誤
sudo docker rm -v $container #隨容器刪除數據卷,但如果有其他容器在用該數據卷,自動不刪除該數據卷
sudo docker create --name $name -v $volume $container
#創建數據卷容器,和之前的創建數據卷一樣。我看書上把$container用一個操作系統來充當
sudo docker run --volumes-from $vol_con $container
#讓容器$container連接數據卷容器$vol_con
sudo docker run -it --volumes-from $vol_con -v $des:$des_dir --rm $container tar cf $des_dir/$des_file $source
#把數據從容器內部的$source 遷移到主機的$des目錄下,比較長,下面仔細講解
sudo docker run -it --volumes-from $vol_con -v $des:$des_dir --rm $container tar xf $des_dir/$des_file
#把數據從宿主機$des目錄下的打包遷移到數據卷容器$vol_con
實例
創建、查看、刪除數據卷
sudo docker volume ls(或list)
sudo docker volume create
sudo docker volume create --name Volume_1
sudo docker volume rm
注意:要用ID刪除數據卷則要寫出64位ID,不能像容器和鏡像那樣前幾位就OK。
數據卷的遷移
sudo docker run -d --name web0 --volumes-from Volume nginx #讓web0連接Volume
sudo docker create --name data -v /html ubuntu #利用Ubuntu創建一個叫data的數據卷容器
sudo docker run -it --volumes-from data -v /home:/backup --rm ubuntu tar cf /bakcup/data.tar /bin
第二行代碼所做如下:
- 先用ubuntu鏡像啓動一個數據卷容器並把該數據卷容器命名成data
- 給data容器掛載上數據,把主機的 /home目錄掛載在data容器的/backup目錄下。此時/backup目錄與主機的/home目錄其實是一個東西,只是一個在容器下,一個在主機下
- 把容器裏的/bin的數據打包成 data.tar,並放在/backup目錄下,也就是主機目錄/home下
- 命令執行完,關閉容器,並用–rm 刪除了容器。
因爲各種原因犯了些錯誤,下圖中第一條和最後兩條命令是成功的。
此時可以在/home文件下看見/data.tar
值得一提的是上面的新建容器導入導出命令可以當做專用於導入導出數據卷的命令。
導入就不說了,要趕緊去吃飯,晚了食堂關門了。
有的地方有錯誤在所難免,哪兒有問題可以在評論裏指出。