docker数据卷挂载

docker容器挂载

创建一个数据卷

docker images
在这里插入图片描述
给ubuntu添加一个数据卷 ,为这个目录/opt/data创建对应的数据卷
docker run --name data -v /opt/data -t -i docker.io/ubuntu /bin/bash
对应宿主机上面的目录查看
docker inspect data|grep /var/lib/docker/volumes
在这里插入图片描述

查看本机文件夹内容

ls /var/lib/docker/volumes/9d303e3573b1668c87569c907ccb77f2dc7903bbf295dd6296de969b7b3551b2/_data
给本机文件567中加入数据123
echo “123” >> /var/lib/docker/volumes/9d303e3573b1668c87569c907ccb77f2dc7903bbf295dd6296de969b7b3551b2/_data/567
进入容器查看容器中/opt/data 下面的数据是否和本地宿主机上面的一样
docker exec -it data /bin/bash
cat /opt/data/567

docker数据卷挂载_第1张图片

挂载宿主机文件或目录到容器数据卷

docker run -t -i --name test -v /etc/web.list:/etc/web.list:ro docker.io//ubuntu /bin/bash
cat /etc/web.list
docker数据卷挂载_第2张图片

挂载宿主机目录到容器上

docker run -t -i --name hqsb -v /var/huanqiupc:/opt/huantime docker.io/centos /bin/bash
docker数据卷挂载_第3张图片

挂载多个目录

docker run --name data -v /opt/data1:/var/www/data1 -v /opt/data2:/var/www/data2:ro -t -i docker.io/ubuntu /bin/bash
docker数据卷挂载_第4张图片

创建数据卷容器

启动一个名为xqsj_Container容器,此容器包含两个数据卷/var/volume1和/var/volume2(这两个数据卷目录是在容器里的,容器创建的时候会自动生成这两目录)
docker run -t -i -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash
查看宿主机上与数据卷对应的目录路径:
docker inspect xqsj_Container|grep /var/lib/docker/volumes
创建App_Container容器,挂载xqsj_Container容器中的数据卷
docker run -t -i --rm --volumes-from xqsj_Container --name App_Container centos /bin/bash
可以再创建一个容器,挂载App_Container中从xqsj_Container挂载的数据卷。当然也可以直接挂载初始的xqsj_Container容器数据卷
docker数据卷挂载_第5张图片

备份数据卷

创建数据卷test
docker run -t -i -v /var/volume1 -v /var/volume2 --name test2 centos /bin/bash
cd /var/volume1
touch a
echo “123” >> a
创建test2数据卷的备份
docker run --rm --volumes-from test2 -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /var/volume1 /var/volume2
docker数据卷挂载_第6张图片
现在开始进行数据卷的备份操作:
为了利用数据卷容器备份,使用–volumes-from标记来创建一个加载wang容器卷的容器,并从主机挂载当前目录到容器的/backup目录。并备份wang卷中的数据,执行完成之后删除容器–rm,此时备份就在当前的目录下了。

1)备份wang容器中的/var/volume1数据卷数据(注意下面:命令中的-i和-t这两个参数加不加都可以;–rm加上,备份后就会自动删除这个容器,如果不加这个–rm参数,那么备份后的容器就会保留,docker ps -a就会查看到)
[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup1.tar /var/volume1
tar: Removing leading `/’ from member names
/var/volume1/
/var/volume1/test1
/var/volume1/test11
/var/volume1/test111

2)备份wang容器中的/var/volume2数据卷数据
[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup2.tar /var/volume2
tar: Removing leading `/’ from member names
/var/volume2/
/var/volume2/test2
/var/volume2/test22
/var/volume2/test222

3)备份wang容器中的/var/volume1和/var/volume2数据卷数据
[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup.tar /var/volume1 /var/volume2
tar: Removing leading `/’ from member names
/var/volume1/
/var/volume1/test1
/var/volume1/test11
/var/volume1/test111
/var/volume2/
/var/volume2/test2
/var/volume2/test22
/var/volume2/test222
[root@localhost ~]# ls
anaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar

这样,数据卷容器中的数据就备份完成了. 简言之就是:
先创建一个容器,并挂载要备份的容器数据卷,再挂载数据卷(pwd):/backup目录到容器/bakcup,在容器中执行备份/data目录到/backup,也就是备份到宿主机$(pwd):/backup目录。
恢复或迁移数据卷
docker run -t -i -d -v /test --name test4 ubuntu:14.04 /bin/bash
docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C /
把宿主机当前目录test.tar 数据恢复到test4容器中
注意-C后面的路径,这个路径表示将数据恢复到容器里的路径。
命令中用"/",即表示将backup.tar中的数据解压到容器的/路径下。后面跟什么路径,就解压到这个路径下。因此这里用"/"
[root@localhost ~]# docker run --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /

删除数据卷

Volume 只有在下列情况下才能被删除:
1)docker rm -v删除容器时添加了-v选项
2)docker run --rm运行容器时添加了–rm选项

否则,会在/var/lib/docker/volumes目录中遗留很多不明目录。
可以使用下面方式找出,然后删除_data目录下的数据文件
[root@localhost volumes]# docker inspect huihui|grep /var/lib/docker/volumes
“Source”: “/var/lib/docker/volumes/97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b/_data”,

可以使用 docker rm -v 命令在删除容器时删除该容器的卷。示例如下:
[root@localhost volumes]# docker run -d -P --name huihui -v /www docker.io/centos
69199905a74cb360935e32f4e99f7f11319f6aa36033a920aa0bae25874f5c69

[root@localhost volumes]# docker volume ls
DRIVER VOLUME NAME
local 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330
local 97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b
local data_volume

[root@localhost volumes]# docker rm -vf huihui
huihui
[root@localhost volumes]# docker volume ls
DRIVER VOLUME NAME
local 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330
local data_volume

Docker新版本出现docker volume 命令:创建数据

Docker 新版本中引入了 docker volume 命令来管理 Docker volume。

使用默认的 ‘local’ driver 创建一个volume数据卷
[root@localhost ~]# docker volume create --name kevin
kevin

[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local kevin

[root@localhost ~]# ll /var/lib/docker/volumes
total 24
drwxr-xr-x 3 root root 19 Oct 28 00:32 kevin
-rw------- 1 root root 32768 Oct 28 00:32 metadata.db

使用这个名为kevin的数据卷
[root@localhost ~]# docker run -d -P --name test1 -v kevin:/volume docker.io/centos
375ef74722404f5c52fde9f2ea7ea322c57e07fbac0b0e69825f077328fdb363

[root@localhost ~]# docker inspect test1

“Mounts”: [
{
“Type”: “volume”,
“Name”: “kevin”,
“Source”: “/var/lib/docker/volumes/kevin/_data”,
“Destination”: “/volume”,
“Driver”: “local”,
“Mode”: “z”,
“RW”: true,
“Propagation”: “”
}

即将kevin数据卷对应在本机上的目录/var/lib/docker/volumes/kevin/_data挂载给容器内的 /volume 目录。

你可能感兴趣的:(docker)