【玩转Docker系列5】Docker数据存储

举报
fengfeng 发表于 2017/03/08 01:02:34 2017/03/08
【摘要】 数据卷是在一个或多个容器,它绕过Union File System的一个专门指定的目录。数据卷的目的是持久化数据,独立于容器的生命周期。Docker因此不会自动删除卷,当你删除一个容器,也不会“垃圾回收”直到没有容器再使用。

1 Docker数据存储

1.1  数据卷

1.1.1 容器内创建数据卷

数据卷是在一个或多个容器,它绕过Union File System的一个专门指定的目录。数据卷的目的是持久化数据,独立于容器的生命周期。Docker因此不会自动删除卷,当你删除一个容器,也不会“垃圾回收”直到没有容器再使用。

docker run时加上-v参数来添加一个数据卷,-v参数也可以使用多次,以挂载多个数据卷。

UbuntuTest:~   # docker run -it --name data_volume -v /test ubuntu:14.04   /bin/bash

root@0800180dc5be:/#   ls -l /test

drwxr-xr-x     2 root root 4096 Sep 20 11:00 test

root@0800180dc5be:/#   cd /test/

root@0800180dc5be:/test#   touch test.volume

root@0800180dc5be:/test#   ls

test.volume

root@0800180dc5be:/test#   exit

exit

UbuntuTest:~   # docker start data_volume

data_volume

UbuntuTest:~   # docker attach data_volume

root@0800180dc5be:/#

root@0800180dc5be:/#   ls -l /test/

total 0

-rw-r--r--   1 root root 0 Sep 20 11:01 test.volume

1.1.2     主机目录作为数据卷

挂载主机目录为数据卷,必须参照-v hostPATH:containerPATH这种格式,路径必须为绝对路径,以保证容器的可移植性。

该功能支持主机目录和文件作为容器的数据卷。本文3.2.3章节在容器中安装软件时需要从主机通过命令拷贝软件,部分容器不支持scp功能时还无法拷贝,利用该功能实现方式更简单而不用关注容器是否支持远程拷贝命令。

UbuntuTest:~ # docker run -it --name data_host_container -v /root:/tmp/root   ubuntu:14.04 /bin/bash

root@2bda024d88d5:/#   ls -l /tmp/root/

total 1571632

-rw-r--r--  1   root root    148899 Sep  7 10:41   CloudServiceTestTools.tgz

root@2bda024d88d5:/#   touch /tmp/root/container_data.test

root@2bda024d88d5:/#   exit

exit

UbuntuTest:~ # ls -l   container_data.test

-rw-r--r-- 1 root   root 0 Sep 20 19:12 container_data.test

1.2    数据卷容器

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。 数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

步骤1:创建数据卷容器db_volume,其共享目录为/dbdata

UbuntuTest:~ # docker run -it -d -v   /dbdata --name db_volume ubuntu:14.04   /bin/bash

97aab02e3d582e585f40b92d711869598313eeb4d6b24d595985f192609de412

UbuntuTest:~ # docker   ps -l

CONTAINER   ID     IMAGE       COMMAND     CREATED        STATUS     PORTS         NAMES

97aab02e3d58      ubuntu:14.04   "/bin/bash"    11 seconds   ago  Up 10   seconds                db_volume

 步骤2:其它容器挂载数据卷容器db_volume的数据卷

UbuntuTest:~ # docker run -it --name db_1 --volumes-from   db_volume ubuntu:14.04 /bin/bash

root@4123dfc817d2:/#   echo "This is file of db_1" > /dbdata/db_1_file.log

root@4123dfc817d2:/#   ls -l /dbdata/

total 4

-rw-r--r-- 1 root   root 21 Sep 20 11:29 db_1_file.log

 步骤3:容器db_1db_2可同时读写数据卷

UbuntuTest:~ # docker run -it --name db_2 --volumes-from   db_volume ubuntu:14.04 /bin/bash

root@7d399ccbe79e:/#   cat /dbdata/db_1_file.log

This is file of db_1

作者 | 胡国胜

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。