Docker 從門到精通(四)一 數據卷的使用

一,數據卷的使用html

有時候須要使用數據庫,可是又但願它的數據能保存在本地,Docker中提供了數據卷能夠供你方便的操做數據。數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,能夠提供不少有用的特性:linux

數據卷能夠在容器之間共享和重用nginx

對數據卷的修改會立馬生效docker

對數據卷的更新,不會影響鏡像數據庫

數據卷默認會一直存在,即便容器被刪除ubuntu

*注意:數據卷的使用,相似於 Linux 下對目錄或文件進行 mount,鏡像中的被指定爲掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的數據卷。bash

Docker 從門到精通(四)一 數據卷的使用Docker 從門到精通(四)一 數據卷的使用

添加一個數據卷:設計

# docker run -d -it --name busybox -v /data/ busybox

這會在容器內建立一個 /data 目錄,並加載一個數據捲到容器的 /data 目錄。htm

進入容器:生命週期

# docker exec -it busybox sh

查看目錄映射:

# docker inspect -f {{.Volumes}} busybox  
map[/data:/var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data]
能夠看到將容器中的 /data 目錄映射到了 /var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data 這個目錄下,因此數據在容器中的 /data 目錄和此目錄下是同步的。

[root@sta2 data]# cd  /var/lib/docker/volumes/b98191464fb0b1a888507b1e5b324802012297342adfe5d6125bcbfd08b621a9/_data
[root@sta2 _data]# touch b

在容器中 /data 目錄下查看:

/data # ls
a  b
b 文件依然存在。

數據卷是被設計用來持久化數據的,它的生命週期獨立於容器,Docker不會在容器被刪除後自動刪除數據卷,而且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的數據卷。若是須要在刪除容器的同時移除數據卷。能夠在刪除容器的時候使用 docker rm -v 這個命令。

[root@sta2 docker]# docker stop eec30d8d6fce
[root@sta2 docker]# docker rm -v eec30d8d6fce

使用 -v 標記也能夠指定掛載一個本地主機的目錄到容器中去,-v 標記也能夠從主機掛載單個文件到容器中

[root@sta2 docker]# docker run -it --name mybusybox -v /data:/data busybox sh

這種方法至關於在本機中指定了要映射的目錄,將本地的數據卷 /data 目錄加載到容器中的 /data 目錄。

/ # cd  /data/
/data # ls
a
/data # touch c

而後在本機的 /data 目錄查看 c 文件是否存在:

[root@sta2 data]# ls  
a  c

Docker 掛載數據卷的默認權限是讀寫,用戶也能夠經過 :ro 指定爲只讀。

# docker run -it --name mybusybox -v /data:/data:ro busybox sh

二,數據卷容器

若是你有一些持續更新的數據須要在容器之間共享,最好建立數據卷容器。

[root@sta2 data]# docker run -d -v /data/ --name  dbdata busybox  #首先,建立一個名爲 dbdata 的數據卷容器

而後,在其餘容器中使用 –volumes-from 來掛載 dbdata 容器中的數據卷。

# docker run -d --volumes-from dbdata --name db1 nginx
 
# docker run -d --volumes-from dbdata --name db2 nginx

也可使用 –volumes-from 來掛載來自多個容器的多個數據卷:

# docker run -d --name db3 --volumes-from db1  --volumes-from db nginx

提示:使用 –volumes-from 參數所掛載數據卷的容器本身並不須要保持在運行狀態。

備份數據卷

首先使用 –volumes-from 標記來建立一個加載 dbdata 容器卷的容器,並從主機掛載當前目錄到容器的 /backup 目錄。命令以下:

# docker run --volumes-from dbdata -v /data:/backup busybox tar cvf /backup/backup.tar.gz /data/

恢復

若是要恢復數據到一個容器,首先建立一個帶有空數據卷的容器 dbdata2。

# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

而後建立另外一個容器,掛載 dbdata2 容器卷中的數據卷,並使用 untar 解壓備份文件到掛載的容器卷中。

# docker run --volumes-from dbdata2 -v /data:/backup busybox tar xvf /backup/backup.tar.gz

爲了查看/驗證恢復的數據,能夠再啓動一個容器掛載一樣的容器捲來查看

# docker run --volumes-from dbdata2 busybox /bin/ls /dbdata

刪除數據

若是刪除了掛載的容器(db1 和 db2),數據卷並不會被自動刪除。若是要刪除一個數據卷,必須在刪除最後一個還掛載着它的容器時使用 docker rm -v 命令來指定同時刪除關聯的容器。

原文來自:http://www.tianfeiyu.com/?p=2426編輯:田飛雨

本文地址:http://www.linuxprobe.com/docker-data-use.html

相關文章
相關標籤/搜索