參考 http://dockone.io/article/128;http://dockone.io/article/129;html
Docker鏡像是由多個文件系統(只讀層)疊加而成。當咱們啓動一個容器的時候,Docker會加載只讀鏡像層並在頂部添加一個讀寫層。若是運行中的容器修改了現有的一個已經存在的文件,那該文件將會從讀寫層下面的只讀層複製到讀寫層,該文件的只讀版本仍然存在,只是已經被讀寫層中該文件的副本所隱藏。當刪除Docker容器,並經過該鏡像從新啓動時,以前的更改將會丟失。在Docker中,只讀層及在頂部的讀寫層的組合被稱爲Union File System(聯合文件系統)。mysql
爲了可以保存(持久化)數據以及共享容器間的數據,Docker提出了Volume的概念。簡單來講,Volume就是目錄或者文件,它能夠繞過默認的聯合文件系統,而以正常的文件或者目錄的形式存在於宿主機上。 linux
Volume能夠將容器以及容器產生的數據分離開來,當使用docker rm my_container刪除容器時,不會影響相關的數據。git
Volume能夠使用如下兩種方式建立:github
編寫dockerfile:在Dockerfile中指定VOLUME /some/dirweb
在容器啓動時執行命令:docker run -v /some/dir命令來指定sql
不管哪一種方式都是作了一樣的事情。它們告訴Docker在主機上建立一個目錄(默認狀況下是在/var/lib/docker下),而後將其掛載到指定的路徑(例子中是:/some/dir)。當刪除使用該Volume的容器時,Volume自己不會受到影響,它能夠一直存在下去。docker
在數據備份前首先須要瞭解數據容器的概念,常見的使用場景是使用純數據容器來持久化數據庫、配置文件或者數據文件等。官方的文檔上有詳細的解釋。數據庫
當使用數據容器時,那作備份是至關容易的:安全
$ docker run --rm --volumes-from dbdata -v $(pwd):/backup debian tar cvf /backup/backup.tar /var/lib/postgresql/data
該示例應該會將Volume裏全部的東西壓縮爲一個tar包
同主機共享:
容器也能夠與其它容器共享Volume。
docker run --name my_container -v /some/path ...
docker run --volumes-from my_container --name my_container2 ...
上面的命令將告訴Docker從第一個容器掛載相同的Volume到第二個容器,它能夠在兩個容器之間共享數據。
若是執行docker rm -v my_container命令,而上方的第二容器依然存在,那Volume不會被刪除,若是不使用docker rm -v my_container2命令刪除第二個容器,那它會一直存在
跨主機共享:
方法一:分佈式數據卷BitTorrent的同步
方法二:經過NFS共享數據
方法三:Rancher實現共享卷和跨主機數據訪問
具體可參考連接http://www.dockerinfo.net/2384.htmlhttps://zhuanlan.zhihu.com/p/21096218
選擇上週建立的webapp應用中的mysql服務,爲其添加捲,卷驅動爲提早添加的rancher-nfs驅動,配置格式爲「卷名:數據路徑」
查看添加後結果
使用mysql圖形化界面工具,創建鏈接,鏈接地址爲rancher宿主機ip地址,端口爲mysql容器所暴露出的端口號,經過sql文件生成表
查看宿主機內搭建nfs服務時所配置共享目錄,sharedata目錄下的文件,運行mysql服務所產生的數據已經被共享到此目錄下
訪問網站,並登陸數據庫中所存儲的用戶名與密碼,數據訪問成功
將mysql服務升級
從新鏈接mysql圖形界面 數據表仍然存在
http://www.cnblogs.com/xhyan/p/6235999.html
http://cizixs.com/2016/06/13/docker-overlay-network
http://tonybai.com/2016/02/15/understanding-docker-multi-host-networking/
https://qinghua.github.io/docker-overlay-network/