天天看點

Docker 資料卷

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

繼續閱讀