數據共享是 volume 的關鍵特性,本節我們詳細討論通過 volume 如何在容器與 host 之間,容器與容器之間共享數據。
容器與 host 共享數據
我們有兩種類型的 data volume,它們均可實現在容器與 host 之間共享數據,但方式有所區別。
對於 bind mount 是非常明確的:直接將要共享的目錄 mount 到容器。具體請參考前面 httpd 的例子,不再贅述。
docker managed volume 就要麻煩點。由於 volume 位於 host 中的目錄,是在容器啟動時才生成,所以需要將共享數據拷貝到 volume 中。請看下面的例子:
docker cp
可以在容器和 host 之間拷貝數據,當然我們也可以直接通過 Linux 的 cp
命令復制到 /var/lib/docker/volumes/xxx。
容器之間共享數據
第一種方法是將共享數據放在 bind mount 中,然后將其 mount 到多個容器。還是以 httpd 為例,不過這次的場景復雜些,我們要創建由三個 httpd 容器組成的 web server 集群,它們使用相同的 html 文件,操作如下:
-
將 $HOME/htdocs mount 到三個 httpd 容器。
-
查看當前主頁內容。
-
修改 volume 中的主頁文件,再次查看並確認所有容器都使用了新的主頁。
另一種在容器之間共享數據的方式是使用 volume container,下節討論。
有個好消息:出版社現在搞促銷,《每天5分鍾玩轉OpenStack》全網最低價銷售,有興趣的同學可以訪問 https://detail.tmall.com/item.htm?id=543416839771 了解詳情 。