docker數據卷

利用數據卷可以查看容器內應用產生的數據,或者把容器內的數據進行備份,或者多個容器之間共享數據。數據卷有以下特點:

  • 數據卷可以在容器之間共享和重用;
  • 數據卷修改會立馬生效;
  • 對數據卷的更新,不會影響鏡像;
  • 數據卷會一直存在,知道沒有容器使用

1、掛在一個主機目錄做數據卷

docker run -v /home/lzj/my_docker:/home/lzj -it ubuntu /bin/bash

把宿主機上的/home/lzj/my_docker目錄掛載到容器的/home/lzj目錄上,目錄不存在的話,直接創建。宿主機上的/home/lzj/my_docker目錄下的數據就可以和容器中/home/lzj目錄下的數據進行共享了。

2、數據卷容器
如果用戶要在容器之間共享數據,最簡單的方式就是使用數據卷容器。數據卷容器就是一個普通的容器,專門用它提供數據卷供其他容器掛載使用。使用方法如下:

第一步,首先創建一個數據卷容器dbdata,並在其中創建一個數據卷掛載到/lzj_data目錄

docker run -it -v /lzj_data --name dbdata ubuntu /bin/bash

進入dbdata容器,可以看到多了個/lzj_data目錄

第二步,分別創建兩個容器db1和db2,並使用–volumes-from來掛載dbdata容器中的數據卷,命令如下:

docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu

分別進入db1和db2容器,可以看到/lzj_data目錄
dbdata 和db1、db2容器中其中一個容器修改/lzj_data目錄下數據,三個容器中的/lzj_data目錄是同步的。例如在db1容器中/lzj_data目錄下創建一個hello.txt文件,則同時能在dbdata和db2容器下的/lzj_data目錄下看到hello.txt文件。

可以多次使用–volumes-from從多個容器掛載多個數據卷;還可以從已經掛載了容器卷的容器來掛載數據卷,例如db2就可以從db1掛載數據卷。

注意:如果關閉了掛載數據卷的容器,數據卷並不會自動刪除,例如關閉了dabada、db1和db2容器,下次再啓動三者容器時,依然能看到掛載的數據卷以及其中的內容。如果要刪除數據卷,必須在刪除最後一個還掛載它的容器時顯示使用docker rm -v命令指定同時刪除關聯的容器。

3、利用數據卷容器遷移數據
備份

docker run --volumes-from dbdata -v $(pwd):/backup --name mydocker ubuntu tar cvf /backup/backup.tar /lzj_data

解析:首先利用ubuntu鏡像創建了一個mydocker容器,用–volumes-from來讓mydocker容器掛載了dbdata容器的數據卷(即/lzj_data目錄),使用-v $(pwd):/backup掛載本地當前目錄到mydocker容器的/backup目錄。
mydocker容器啓動後,運行tar cvf /backup/backup.tar /lzj_data命令,將/lzj_data目錄下的數據備份到了/backup/backup.tar壓縮文件,而mydocker又掛載了宿主機當前目錄,因此在宿主機當前目錄會看到一個backup.tar文件。

恢復
如果想恢復已經備份好的數據到正在運行的容器中,可以繼續利用數據卷容器。
首先創建一個運行的容器dbdata,把備份好的數據恢復到該容器中:

    docker run -it -v /mydata --name dbdata ubuntu /bin/bash

先在創建一個數據卷容器,用於恢復數據

docker run --volumes-from dbdata -v $(pwd):/backup --name db ubuntu tar -xvf /backup/hello.zip -C /mydata

解析:啓動了一個db容器,並掛載了dbdata容器,db容器共享了dbdata的數據卷,然後db又把宿主機本地目錄掛載到了db容器中/backup中,宿主機本地有備份的hello.zip壓縮文件,所以在db容器中/backup目錄頁共享了該壓縮文件,在啓動db容器時執行了tar -xvf /backup/hello.zip -C /mydata,把壓縮文件解壓到了db容器的/mydata目錄,因此在dbdata容器中的/mydata容器也看到了解壓的文件。

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