docker数据卷

数据卷


数据卷提供了一种主机和容器共享数据的方式,有些时候如果我们需要用它
来做持久化和数据共享。当做持久化时,通常数据卷都会比较大,你可以将其放
在单独的磁盘、卷或者阵列上,这个时候容器只是一个执行环境。当做数据共享
时,可以用于开发和测试分布式系统,比如需要用到共享盘,需要处理fencing
等等。数据卷主要通过-v 参数来指定。



6.1.1 创建一个数据卷

有时候,你需要一个外部卷来存放持久化数据,而不想把数据包含在容器内
部。例如:
root@ghostcloud:~# docker run -d -P --name datatest -v /webapp ubuntu
13ffee3a3f50d07fd5a737aaf2efc60ceec28e2b04c5d534cfd84d8b70019c11
这条命令创建了一个名为datatest 的容器,同时为其创建了一个/webapp 的
数据卷,这是数据卷在其内部的位置。那么它在主机上的什么位置呢?
root@ghostcloud:~# docker inspect 13ff


...

"Mounts": [
{
"Name":
"ec1c427a6a76be4918d6e8bac3247e2836dc8f424c9e06466fcf1baab6e7ee79",
"Source":
"/var/lib/docker/volumes/ec1c427a6a76be4918d6e8bac3247e2836dc8f424c9e06466fcf1baab6e7ee79
/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
...
它的位置在/var/lib/docker 下。



6.1.2 映射一个外部卷

如果以-v src:des 的方式指定,那么容器则会直接将主机的卷mount 到内部:
root@ghostcloud:~# docker run -it -v /root:/hostroot ubuntu
root@86ea1246ae5d:/# ls /hostroot
Dockerfile composetest gcagent myimage uninstall_agent.sh
上面我将/root 映射到了容器的/hostroot 中,从这儿可以看出这是有很大的风
险的,因此在做数据卷映射的时候,一定要特别小心,任何时候都不要将/映射
到容器内部。



6.2 使用数据型容器

由于容器本身就可以包含文件系统,那么可不可以把容器的卷分享给另一个
容器用呢,答案是可以的。具体的步骤如下:


1. 创建一个包含外部卷的容器,注意是create,并不是run。Run 是create

后再start,这里我们只需要容器的文件系统,所以只需要create.
root@ghostcloud:~# docker create -v /dbdata --name dbstore ubuntu
d95cdc1139ed1011fe51843f524c377cd7497629e9a4434508f422f15b61a03c


2. 在另一个容器中通过--volumes-from 来映射:

root@ghostcloud:~# docker run --rm -it --volumes-from dbstore ubuntu

root@4b61bb181471:/# df -h
Filesystem Size Used Avail Use% Mounted on
none 8.8G 4.2G 4.2G 50% /
tmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/disk/by-uuid/27d8b1c5-4bfc-4499-94d6-6e5f5c42e923 8.8G 4.2G 4.2G 50% /dbdata


6.3 备份、还原和迁移数据卷

下面是一条通过容器型数据卷和数据卷联合使用做备份的例子:
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar
/dbdata
剖析:
 --volumes-from 表示使用dbstore 这个容器的数据卷
 -v $(pwd):/backup 表示将当前路径映射到容器中的/backup 中,用于后续
备份
 ubuntu tar cvf /backup/backup.tar /dbdata 表示将/dbdata 的内容备份到当
前目录。
上面这个例子就是典型的将容器作为一个工具来使用,如果更进一步你可以
自己写一个dockerfile,然后产生一个image,将参数上面都指定好,以后就只需
启动容器就可备份,备份完成后又自动退出。
那么还原呢?
$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata &&
tar xvf /backup/backup.tar --strip 1"
类似的,通过tar 来解压即可。


6.4 总结

我们来总结一下,数据卷有下面几个特点:
 数据卷在容器创建的时候进行初始化
 数据卷可以共享,也可以在容器之间重用
 对于数据卷的读写是直接下发的
 Commit 命令不会将改动保存到镜像中
 即使容器被删除了,数据卷仍然存在,因此这一块需要特别注意,避免产生垃圾数据卷


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值