1、存储卷
存储卷:在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。
2、存储卷的绑定关系两种
docker容器存储目录:/var/lib/docker/overlay
第一种:容器和宿主机自带的绑定关系目录
[这种绑定关系跟随容器变,容器一旦被删除,宿主机里内容同时也不存在为空,所以一般不用此操作执行绑定关系]如: -rm 容器退出后自动删除
[root@king ~]# docker run --rm -it busybox
/ # ls /
bin dev etc home proc root sys tmp usr var
/ # mkdir /data
/ # ls /
bin data dev etc home proc root sys tmp usr var
/ # touch /data/cute1.txt
/ # ls /data/cute1.txt
/data/cute1.txt
/ # ls /data/
cute1.txt
/ #exit //退出后删除容器
↑复制该窗口查看:
[root@king ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b78c20658baf busybox "sh" 3 hours ago Up 3 hours heuristic_mccarthy
[root@king ~]# docker inspect b78c20658baf
... (↓找到下面这行复制双引号里内容)
"UpperDir": "/var/lib/docker/overlay2/e9fbc80c6e50fa056290d37b3bbc0a80543f814bee3ef668d3c441b8623ae31f/diff",
...
[root@king ~]# cd /var/lib/docker/overlay2/e9fbc80c6e50fa056290d37b3bbc0a80543f814bee3ef668d3c441b8623ae31f/diff
[root@king diff]# ls
data root
[root@king diff]# ls data/
cute1.txt
[root@king diff]# ls //以上已删除容器,宿主机上也同时删除不存在
第二种:自己创建新目录,然后绑定挂载卷使用,即使删除容器,宿主机上挂载的数据也不会消失。
3、容器数据的管理
容器数据管理有两种方式:
①数据卷
②数据卷管理
docker 管理数据卷挂载:
[root@king ~]# docker run --rm -it -v data/ busybox //-v创建并挂载绑定目录data
/ # ls
bin day dev etc home proc root sys tmp usr var
/ # touch /data/888
/ # exit //退出后删除容器,此时宿主机绑定关系目录数据也不存在
复制窗口:
[root@king ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cbcd13b4bf90 busybox "sh" 14 seconds ago Up 13 seconds pensive_einstein
[root@king ~]# docker inspect cbcd13b4bf90 //查看容器详细信息,找到mount
...(找到mount下Source)
"Mounts": [
{
"Type": "volume",
"Source": "/var/lib/docker/volumes/6730166af36fccbde361c58a5f79ae08a3f25aeb9fb5ad36eb53fe18ccdce111/_data",
...
[root@king ~]# cd /var/lib/docker/volumes/6730166af36fccbde361c58a5f79ae08a3f25aeb9fb5ad36eb53fe18ccdce111/_data
[root@king _data]# ls
888
[root@king _data]# ls
[root@king _data]#
[此时的挂载绑定关系还是docker自己生成的,所以不常用此挂载目录数据]
绑定挂载数据卷:
①创建一个需挂载目录(可事先创建,也可运行容器时就自动创建)
[root@king ~]# mkdir container_v1
[root@king ~]# ls
container_v1
或{容器[root@king ~]# docker run --rm -it -v /root/container_v1:/data busybox
/ #
宿主机[root@king ~]# ls
container_v1 }
②然后运行一个容器并挂载一个主机目录作为数据卷
[root@king ~]# docker run --rm -it -v /root/container_v1:/data busybox
/ # ls
bin data dev etc home proc root sys tmp usr var
③在data目录创建一个文件
/ # cd data/
/data # touch cat.txt
/data # ls
cat.txt
④在宿主机上查看挂载情况
[root@king ~]# ls
container_v1
[root@king ~]# cd container_v1/
[root@king container_v1]# ls
cat.txt
⑤此时验证当删除容器时,宿主机数据是否存在
容器:
/ # exit
[root@king ~]#
宿主机:
[root@king container_v1]# ls
cat.txt
[此时目录是创建生成的,并挂载绑定宿主机,当容器删除后,宿主机上的数据依然存在,如果要重新再次绑定执行之前命令,数据回来]
4、在容器中使用存储卷
权限 ro:只读 rw:可读写
挂载一个本地主机上文件作为数据卷:
如:挂载主机内储存历史命令文件作为容器的数据卷(跟上本机文件绝对路径)
[root@king ~]# docker run --rm -it -v ~/.bash_history:/root/.bash_history busybox
/ # cd
~ # ls -a
. … .ash_history .bash_history
~ # cat .bash_history
cd ~
docker ps
deocker ps -a
…
5、数据卷容器
容器之间共享数据,并能实时接收更新数据:
1、创建一个数据卷容器Fdata,并在其中创建一个数据卷挂载到/Fdata:
2、运行其它容器d1使用--volumes-from来挂载来自Fdata容器的数据卷
3、容器d1都挂载同一个数据卷到相同的/Fdata目录.分别在各容器创建文件添加内容,发现其它容器都可以接收看到
[可多次使用--volumes-from共享容器数据,即使容器不在运行状态也可接受到,只要没删除容器]
6、数据卷容器迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移!
【备份】
首先需要备份迁移的容器存在:
[root@king ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
614fbad3907a busybox "sh" 5 minutes ago Up 5 minutes Fdata
然后进行迁移:
[root@king ~]# docker run --rm -it --name k1 --volumes-from Fdata -v $(pwd):/backup busybox tar -cvf /backup/backup.tar /backup
//运行一个新容器k1,使容器k1挂载到Fdata容器中的数据卷Fdata上,使用-v参数将本地当前目录挂载到k1容器/backup上,将/backup下数据压缩打包备份为容器/backup/backup.tar,并迁移本机当前目录下backup.tar。
tar: removing leading '/' from member names
...
tar: /backup/backup.tar: file is the archive; skipping
[root@king ~]# ls //数据卷数据备份迁移完成
backup.tar
【恢复】
如果要恢复数据到一个容器,首先创建一个带有数据卷的容器k2:
[root@king ~]# docker run --rm -it --name k2 -v /Fdata busybox
创建另一个新的容器,挂载k2容器,并解压备份文件到所挂载的k2容器卷中:
[root@king ~]# docker run --rm -it --volumes-from k2 -v $(pwd):/backup busybox tar -xvf /backup/backup.tar