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