[TOC]
说明:转载地址 https://www.cnblogs.com/wade-luffy/p/6542539.html
数据卷
如果你现在的容器挂掉了, 那么比如你redis里面的RDB或者AOF的数据, 都会丢失, 如果你挂载到了宿主机,那么在重新启动,数据都在。同时多个容器共享一个配置,多个容器之间的数据还是同步。也就是,一些数据可以统一进行修改处理 。
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
数据卷应该场景
转载地址: https://blog.51cto.com/idweb/2322087?source=dra
- 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载统一个数据卷,从而共享数据卷中的数据
- 当宿主机不能保证一定存在某一个目录或一些固定的文件路径时,使用数据卷可以规避这种限制带来的问题
- 当想把容器中的数据存储在宿主机之外的地方时,比如远程主机上和云存储上
- 当你需要把容器数据在不同宿主机之间备份、恢复或迁移时,数据卷是很好的选择
数据覆盖问题
- 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
- 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如果原来容器中的目录有数据,那么原始数据会被隐藏掉
这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。
实例操作
#创建一个数据卷容器dbdata
$ docker run -it -v /dbdata --name dbdata ubuntu
#然后,可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷.
#例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:
$ docker run -it --volumes-from dbdata --name db1 ubuntu
$ docker run -it --volumes-from dbdata --name db2 ubuntu
#此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。
#可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。
#使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。
#如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。
数据卷容器来迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
首先利用ubuntu镜像创建了一个容器worker。使用--volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷),使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录。worker容器启动后,使用了tar cvf /backup/backup.tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。
恢复
如果要将数据恢复到一个容器,可以按照下面的步骤操作。
首先创建一个带有数据卷的容器dbdata2:
$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:
$ docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu bash
cd /dbdata
tar xvf /backup/backup.tar
把数据存储到SSH服务器
注意:目前这个不成功 ,后期在进行修改,有可能这个插件需要填写设置秘钥
#下载插件
docker plugin install --grant-all-permissions vieux/sshfs
#创建volume
docker volume create --driver vieux/sshfs \
-o sshcmd=maizissh@127.0.0.1:/home/maizissh/sshvolume \
-o password=maizi_today \
mysshvolume
#启动容器
docker run -d --name sshfs \
--mount type=volume,volume-driver=vieux/sshfs,source=mysshvolume,target=/home/maizissh/sshvolume \
ubuntu /bin/bash
#提示错误
docker: Error response from daemon: error while mounting volume '': VolumeDriver.Mount: sshfs command execute failed: exit status 1 (read: Connection reset by peer
#感觉要设置秘钥, 后期这个需要的时候在进行处理,
docker -v
如果是单一的redis恢复数据, 只要把前面容器里面的数据,copy出来, 然后-v 直接复制进去,然后重启就OK了。
sudo docker run --rm-i -t -v /home/hyzhou/docker:/data:rw ubuntu:14.04 /bin/bash
将本机的/home/hyzhou/docker,挂载到镜像中的/data目录
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付