容器学习 之 共享数据(十六)
容器與 host 共享數(shù)據(jù)
我們有兩種類型的 data volume,它們均可實(shí)現(xiàn)在容器與 host 之間共享數(shù)據(jù),但方式有所區(qū)別。
對(duì)于 bind mount 是非常明確的:直接將要共享的目錄 mount 到容器。具體請(qǐng)參考前面 httpd 的例子,不再贅述。
docker managed volume 就要麻煩點(diǎn)。由于 volume 位于 host 中的目錄,是在容器啟動(dòng)時(shí)才生成,所以需要將共享數(shù)據(jù)拷貝到 volume 中。請(qǐng)看下面的例子:
容器之間共享數(shù)據(jù)
第一種方法是將共享數(shù)據(jù)放在 bind mount 中,然后將其 mount 到多個(gè)容器。
第二種方法是用 volume container 共享數(shù)據(jù)
colume container 是專門為其他容器提供 volume 的容器。
我們將容器命名為 vc_data(vc 是 volume container 的縮寫)。注意這里執(zhí)行的是 docker create 命令,這是因?yàn)?volume container 的作用只是提供數(shù)據(jù),它本身不需要處于運(yùn)行狀態(tài)。容器 mount 了兩個(gè) volume:
通過 docker inspect 可以查看到這兩個(gè) volume。
docker inspect vc_data
其他容器可以通過 --volumes-from 使用 vc_data 這個(gè) volume container:
web1 容器使用的就是 vc_data 的 volume,而且連 mount point 都是一樣的。驗(yàn)證一下數(shù)據(jù)共享的效果:
第三種方法
volume container 的數(shù)據(jù)歸根到底還是在 host 里,有沒有辦法將數(shù)據(jù)完全放到 volume container 中,同時(shí)又能與其他容器共享呢?當(dāng)然可以,通常我們稱這種容器為 data-packed volume container。其原理是將數(shù)據(jù)打包到鏡像中,然后通過 docker managed volume 共享。
我們用下面的 Dockfile 構(gòu)建鏡像:
ADD 將靜態(tài)文件添加到容器目錄 /usr/local/apache2/htdocs。
VOLUME 的作用與 -v 等效,用來創(chuàng)建 docker managed volume,mount point 為 /usr/local/apache2/htdocs,因?yàn)檫@個(gè)目錄就是 ADD 添加的目錄,所以會(huì)將已有數(shù)據(jù)拷貝到 volume 中
build 新鏡像 datapacked:
用新鏡像創(chuàng)建 data-packed volume container:
因?yàn)樵?Dockerfile 中已經(jīng)使用了 VOLUME 指令,這里就不需要指定 volume 的 mount point 了。啟動(dòng) httpd 容器并使用 data-packed volume container:
容器能夠正確讀取 volume 中的數(shù)據(jù)。data-packed volume container 是自包含的,不依賴 host 提供數(shù)據(jù),具有很強(qiáng)的移植性,非常適合 只使用 靜態(tài)數(shù)據(jù)的場景,比如應(yīng)用的配置信息、web server 的靜態(tài)文件等。
總結(jié)
以上是生活随笔為你收集整理的容器学习 之 共享数据(十六)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 容器学习 之 docker存储(十五)
- 下一篇: 容器学习 之 管理Volumn(十七)