Docker适合許多無狀态的服務,對于資料的存儲和共享一般是通過資料卷和資料卷容器的方式,這裡将介紹Docker資料卷的相關内容。
docker資料卷的實作方式有兩種:
1、建立一個資料卷容器。
2、建立一個容器,配置設定存儲空間,讓其他容器通路。
資料卷
資料卷可以當作一個特殊的容器。docker的其他容器都可以對他進行通路,類似于NFS。
建立一個資料卷,在容器内部挂載/data:
1
<code>docker run -it --name volume -</code><code>v</code> <code>/data</code> <code>centos</code>
-v 指定挂載一個卷或者容器卷。
在容器中可以看到有一個/data目錄:
2
<code>[root@ed9ca073c034 /]</code><code># df -h|grep data</code>
<code>/dev/mapper/centos-root</code> <code>38G 3.8G 34G 10% </code><code>/data</code>
我們可以通過檢視容器的資訊,确認容器中/data的所映射的主控端目錄:
3
4
5
6
7
8
9
10
11
12
<code># docker inspect volume|grep "Mounts" -A 10</code>
<code> </code><code>"Mounts"</code><code>: [</code>
<code> </code><code>{</code>
<code> </code><code>"Name"</code><code>: "0ceaa3d20a99dd152b542b,</code>
<code> </code><code>"Source"</code><code>: </code><code>"/var/lib/docker/volumes/0ceaa3d20a99dd152b/_data"</code><code>,</code>
<code> </code><code>"Destination"</code><code>: </code><code>"/data"</code><code>,</code>
<code> </code><code>"Driver"</code><code>: </code><code>"local"</code><code>,</code>
<code> </code><code>"Mode"</code><code>: </code><code>""</code><code>,</code>
<code> </code><code>"RW"</code><code>: </code><code>true</code><code>,</code>
<code> </code><code>"Propagation"</code><code>: </code><code>""</code>
<code> </code><code>}</code>
<code> </code><code>],</code>
在Source 項中,指定了本地的路徑/var/lib/docker/volumes/0ceaa/_data,映射到容器中的就是/data目錄,在容器的/data目錄中寫入的資料,在主控端的此路徑一樣可以看到,其實相當于是容器挂載的主控端的某個目錄。
使用上面的方式系統會預設使用主控端/var/lib/docker/volumes這個路徑,如果我們想指定一個路徑可以使用如下方式:
主控端建立一個挂載目錄:
<code> </code><code>mkdir</code> <code>/docker_volume</code>
建立容器卷,映射主控端/docker_volume目錄到容器的/data目錄:
<code>docker run -it --name volume1 -</code><code>v</code> <code>/docker_volume/</code><code>:</code><code>/data</code> <code>centos</code>
可以指定容器對目錄的讀寫權限:
<code>docker run -it --name volume1 -</code><code>v</code> <code>/docker_volume/</code><code>:</code><code>/data</code><code>:ro centos </code><code>#隻讀</code>
<code>docker run -it --name volume1 -</code><code>v</code> <code>/docker_volume/</code><code>:</code><code>/data</code><code>:rw centos </code><code>#讀寫</code>
如果設定為隻讀狀态,嘗試對目錄檔案進行修改時會提示隻讀:
<code>[root@f7f41d28af31 data]</code><code># touch bb</code>
<code>touch</code><code>: cannot </code><code>touch</code> <code>'bb'</code><code>: Read-only </code><code>file</code> <code>system</code>
也可以對檔案進行挂載(不推薦):
<code>docker run -it --name volume1 -</code><code>v</code> <code>/test</code><code>.log/:</code><code>/test</code><code>.log centos</code>
容器卷可以不啟動,其他容器也能正常通路,隻有當所有容器都解除安裝容器卷磁盤時容器才可以被删除。
通路資料卷容器
資料卷容器就是讓一個容器通路另一個容器的卷。
建立一個容器volumeA,通路volume1容器中的/data目錄:
<code>docker run -it --name volumeA --volumes-from volume1 centos</code>
檢視volumeA中的目錄:
<code># df -h|grep data</code>
<code>/dev/mapper/centos-root</code> <code>38G 3.8G 34G 10% </code><code>/data</code>
容器就可以共享主控端的/docker_volume目錄中的所有檔案了。
提示:如果是通過以上的方式從主控端映射一個目錄到容器中,其他容器通過挂載此容器的方式來通路資料卷,當這個容器停止甚至删除後對其它容器不會有任何影響。
本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1946241