容器的存儲機制
參考 http://dockone.io/article/128;http://dockone.io/article/129;
Docker鏡像是由多個文件系統(只讀層)疊加而成。當我們啟動一個容器的時候,Docker會加載只讀鏡像層並在頂部添加一個讀寫層。如果運行中的容器修改了現有的一個已經存在的文件,那該文件將會從讀寫層下面的只讀層復制到讀寫層,該文件的只讀版本仍然存在,只是已經被讀寫層中該文件的副本所隱藏。當刪除Docker容器,並通過該鏡像重新啟動時,之前的更改將會丟失。在Docker中,只讀層及在頂部的讀寫層的組合被稱為Union File System(聯合文件系統)。
為了能夠保存(持久化)數據以及共享容器間的數據,Docker提出了Volume的概念。簡單來說,Volume就是目錄或者文件,它可以繞過默認的聯合文件系統,而以正常的文件或者目錄的形式存在於宿主機上。
Volume可以將容器以及容器產生的數據分離開來,當使用docker rm my_container刪除容器時,不會影響相關的數據。
Volume可以使用以下兩種方式創建:
編寫dockerfile:在Dockerfile中指定VOLUME /some/dir
在容器啟動時執行命令:docker run -v /some/dir命令來指定
無論哪種方式都是做了同樣的事情。它們告訴Docker在主機上創建一個目錄(默認情況下是在/var/lib/docker下),然后將其掛載到指定的路徑(例子中是:/some/dir)。當刪除使用該Volume的容器時,Volume本身不會受到影響,它可以一直存在下去。
容器數據的備份
在數據備份前首先需要了解數據容器的概念,常見的使用場景是使用純數據容器來持久化數據庫、配置文件或者數據文件等。官方的文檔上有詳細的解釋。
當使用數據容器時,那做備份是相當容易的:
$ 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
Linux配置nfs服務
參考http://www.linuxidc.com/Linux/2016-04/129848.htm
在商店中添加nfs驅動服務
添加數據卷
添加一個mysql服務,將數據庫數據存在數據卷中
選擇上周創建的webapp應用中的mysql服務,為其添加卷,卷驅動為提前添加的rancher-nfs驅動,配置格式為“卷名:數據路徑”
查看添加后結果
使用mysql圖形化界面工具,建立連接,連接地址為rancher宿主機ip地址,端口為mysql容器所暴露出的端口號,通過sql文件生成表
查看宿主機內搭建nfs服務時所配置共享目錄,sharedata目錄下的文件,運行mysql服務所產生的數據已經被共享到此目錄下
訪問網站,並登錄數據庫中所存儲的用戶名與密碼,數據訪問成功
驗證服務升級或者刪除后數據是否還存在
將mysql服務升級
重新連接mysql圖形界面 數據表仍然存在
網絡
本地網絡docker0
http://www.cnblogs.com/xhyan/p/6235999.html
overlay網絡(CNI)
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/
ipsec網絡與安全策略
http://lzozhuyk.blog.51cto.com/782498/277920