1、Docker 容器下数据卷的理解
一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性
- 实现数据持久化或共享.
- 数据卷可以在容器之间共享和重复利用
- 可以对数据卷里的内容直接进行修改
- 对镜像的更新不会改变数据卷的内容
- 卷会一直持续到没有容器使用他们
1.1、添加一个数据卷
可以使用带有 -v 参数的 docker run 命令给容器添加一个数据卷.
[ root@d16afd8618ee /]# df -hl
Filesystem Size Used Avail Use% Mounted on
tmpfs 914M 0 914M 0% /dev
shm 64M 0 64M 0% /dev/shm
tmpfs 914M 0 914M 0% /run
tmpfs 914M 0 914M 0% /tmp
/dev/sda1 16G 5.3G 9.6G 36% /data
tmpfs 914M 0 914M 0% /run/secrets
tmpfs 914M 0 914M 0% /proc/kcore
在Dockefile中使用VOLUME指令来创建添加一个或多个数据卷
1.2、挂载宿主文件夹到数据卷
使用-v参数也可以挂载宿主的文件夹到容器里
[root@localhost ~]# mkdir attach_vol
[root@localhost ~]# docker run -ti -v /root/attach_vol:/data centos /bin/bash
[root@34c6750751f9 /]# ls /data
[root@34c6750751f9 /]# mkdir /data/test
[root@34c6750751f9 /]#
这样会把本地的 /root/attach_vol文件夹挂在容器/data目录
宿主机上的文件夹必须是绝对路径,而且当文件夹不存在时会自动创建
此功能在Dockerfile文件中无法使用
默认情况下Docker以读写权限挂载数据卷,但是我们也可以以只读方式进行挂载
1
|
docker run -d -p 0.0.0.0:44455:22 --name data1 -
v
/src/data
:
/opt/data
:ro centos6-
ssh
|
还是上面的那个命令,只是我们添加了一个ro选项来制定挂载时文件权限应该是只读的
1.3 挂载本地文件作为数据卷
[ root@bdfad7e8331a /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[ root@bdfad7e8331a /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[ root@bdfad7e8331a /]# cd
[ root@bdfad7e8331a ~]# ls
[ root@bdfad7e8331a ~]# exit
exit
1.4、创建和挂载一个数据卷容器
如果一些数据需要在容器间共享最好的方式来创建一个数据卷容器,然后从数据卷容器中挂载数据
1\创建一个带有命名容器来共享数据
[ root@c75b032d0cad /]# df -hl
Filesystem Size Used Avail Use% Mounted on
tmpfs 914M 0 914M 0% /tmp
/dev/sda1 16G 5.3G 9.6G 36% /data
tmpfs 914M 0 914M 0% /run/secrets
tmpfs 914M 0 914M 0% /proc/kcore
[ root@4b5c5cee494d /]# df -hl
Filesystem Size Used Avail Use% Mounted on
tmpfs 914M 0 914M 0% /tmp
/dev/sda1 16G 5.3G 9.6G 36% /data
tmpfs 914M 0 914M 0% /run/secrets
tmpfs 914M 0 914M 0% /proc/kcore
[ root@0ded6c200f2b /]# df -hl
Filesystem Size Used Avail Use% Mounted on
tmpfs 914M 0 914M 0% /tmp
/dev/sda1 16G 5.3G 9.6G 36% /data
tmpfs 914M 0 914M 0% /run/secrets
tmpfs 914M 0 914M 0% /proc/kcore
可以使用多个 -–volumes-from 参数来把多个容器中的多个数据卷放到一起
1.4、备份,恢复数据
备份
使用它们来进行备份,恢复或迁移数据.如下所示,我们使用
–volumes-from 标记来创建一个挂载了要备份数据卷的容器.
[root@localhost ~]# docker run --volumes-from data_provider -v $(pwd):/backup --name backup_worker2 centos
[root@367e610fe294 /]# tar -cvf /backup/backup.tar /data
这里我们创建并登录了一个新容器,挂载了data_provider容器中的数据卷,并把本地的一个目录挂载了/backup下,最后再传一条tar命令来备份dbdata卷到/backup下,当命令执行完成后容器就会停止运行,并保留dbdata的备份,在本地目录下会一个备份的文件
注:新创建的容器中要有tar命令,得到备份数据就可以恢复或迁移数据了
恢复
首先创建一个容器
[root@localhost ~]# docker run -it -v /restore --name data_restore centos
[root@74d2eb371a14 /]#
再创建一个新的容器,该容器挂载data_restore容器,并将压缩文件解压缩到关在的容器卷中
[root@localhost ~]# docker run -it --rm --volumes-from data_restore -v $(pwd):/restore centos tar -xvf backup.tar