Docker學習過程 (5-資料卷)
阿新 • • 發佈:2019-01-13
今天要說的是資料卷和資料卷容器。所謂的資料卷就像一個硬碟分割槽,可以掛載在容器上。
值得一提的地方:
- 資料卷一般不會在容器停止時自動被刪除
- 多個容器共享一個數據卷,則在一個容器裡對資料卷的操作會馬上反應在另外的容器,畢竟資料卷是一個。
- 資料卷容器其實不是把資料卷放在放在一個容器裡,而只是一個管理資料卷的工具。
- 資料卷與容器的關係如圖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
值得一提的是上面的新建容器匯入匯出命令可以當做專用於匯入匯出資料卷的命令。
匯入就不說了,要趕緊去吃飯,晚了食堂關門了。
有的地方有錯誤在所難免,哪兒有問題可以在評論裡指出。