一、数据卷:
1、启动一个nginx的容器,创建一个data的数据卷,自动映射到本地主机的某个文件目录;
[root@tcy1 tcy]# docker run -it --name volume-test1 -h nginx -v /data nginx
-h 指定主机名; -v: 启用数据卷
2、查看数据卷与本地主机之间的映射
[root@tcy1 tcy]# docker inspect -f {{.Volumes}} volume-test1 map[/data:/var/lib/docker/volumes/ec83815163550651bc0ab45ea54487c0083653feef48a30a35998c55d31152ea/_data]
这是说容器下的data目录与主机下的的/var/lib/docker/volumes/ec838151635.......1152ea/_data目录数据共享,无论在哪个目录下进行操作,另一个目录也会有相应操作。
例如:在主机下创建一个testSyc文件:
[root@tcy1 _data]# touch testSyc
在docker容器中也会有这个文件:
进入docker容器查看:
①、进入容器:
[root@tcy1 tcy]# ./in.sh volume-test1
in.sh是写的一个快速进入的脚本:如下:
[root@tcy1 tcy]# cat in.sh #!/bin/bash CNAME=$1 CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME) nsenter --target "$CPID" --mount --uts --ipc --net --pid
②、进入data目录:
root@nginx:/# cd data/
③、查看
root@nginx:/data# ls -a . .. tcyTest
3、指定数据卷与主机的映射文件
[root@tcy1 /]# docker run -it --name volume-test2 -h nginx -v /a:/b nginx
-v /a:/b 主机中的/a与容器中的目录/b想关联。
查看主机中出现了/a目录:
[root@tcy1 /]# ls a boot data docker etc lib lost+found misc net proc sbin srv tmp var bin cgroup dev docker-1.11.1.tgz home lib64 media mnt opt root selinux sys usr
查看容器中出现了/b目录:
root@nginx:/# ls b bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
同样,任何一个目录下有数据变动,会同步到另一个目录下。
二、数据卷容器:
启动一个容器专门用来存数据,其他容器就不挂载了,从这个存数据的容器里面里去读。
例如:在数据卷1中,我们启动了一个数据卷 /data中用来存数据
[root@tcy1 /]# docker run -it --name volume-test1 -h nginx -v /data nginx
现在,我们再起一个容器volume-test4,该容器中的卷来自volume-test1中的/data,可以共享卷,即使volume-test1处于关闭状态。
[root@tcy1 tcy]# docker run -it --name volume-test4 --volumes-from volume-test1 nginx
查看volume-test4中是否有/data和/data下面我们之前创建的目录。都有
root@cc65422e80fe:/# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv s root@cc65422e80fe:/# cd data root@cc65422e80fe:/data# ls test testSyc
三、利用数据卷容器来迁移数据
1、备份:
[root@tcy1 Documents]# docker run --volumes-from volume-test1 -v $(pwd):/backup --name volume-test6 nginx tar cvf /backup/backup.tar /data tar: Removing leading `/' from member names /data/ /data/test/ /data/testSyc
命令解释:
①、首先利用nginx镜像创建了一个名字为volume-test6的容器;
②使用 --volumes-from volume-test1参数让volume-test6容器挂载volume-test1容器中的data数据卷;
③使用 -v $(pwd):/backup参数来挂载本地的当前目录到volume-test1容器的/backup目录。
④volume-test1容器启动后,使用tar cvf /backup/backup.tar /data命令来将 /data下内容备份为容器内的/backup/backup.tar,即宿主机当前目录下的backup.tar。
查看结果:
该文件夹下有了backup.tar
[root@tcy1 Documents]# ls backup.tar
2、恢复
将数据恢复到一个容器:
①创建一个带有数据卷datarecover的容器recover,
[root@tcy1 Documents]# docker run -v /datarecover --name recover nginx
②创建另一个新的容器,挂载数据卷datarecover,然后解压备份文件到所挂载的容器卷中。
[root@tcy1 tcy]# docker run --volumes-from recover -v $(pwd):/backup nginx tar xvf /backup/backup.tar
data/
data/test/
data/testSyc