序言
使用Docker过程中,需要对数据进行持久化或在多容器之间、主机与容器之间需要进行数据共享,必然涉及到容器的数据管理。
容器中数据管理方式有两种:
数据卷Data Volumes:容器和本地主机间映射的特殊目录,绕过 UFS;
数据卷容器Data Volumes Containers:使用特定的容器维护数据卷。
数据卷特性:
可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更新不会影响镜像
数据卷默认会一直存在,即使容器被删除。
一、主机-容器数据交互图
数据卷(Volumes):通过docker volume create -d local 数据卷名称 创建
绑定数据卷 (Bind mounts):创建容器时将主机本地目录路径挂载到容器内做为数据 卷的形式称绑定数据卷。
Tmpfs mount:临时数据卷,存在于内存中。
二、数据卷容器Data Volumes Containers
1.数据卷容器创建与数据共享
创建数据卷容器dataContainer,同时创建本地数据卷(/tmp/localdataVol)挂载到/dataVol:
docker run -itd -v /tmp/localdataVol:/dataVol
--name dataContainer ubuntu
1.验证本地本地数据卷(/tmp/localdataVol)和容器内/dataVol目录内数据的一致性:
进入dataContainer容器编辑dataVol数据卷下文件内容:
docker exec -it dataContainer /bin/bash
echo ‘dataContainer-dataVol:dataVolumes context data...’ \
> log.txt
退出容器查看本地数据卷数据是否同步更新:cat /tmp/localdataVol/log.txt
2.验证新数据卷容器dataContainer2和原容器dataContainer间数据卷数据共享、同步:
创建新数据卷容器dataContainer2,同时挂载容器dataContainer内所有数据卷:
docker run -itd --volumes-from dataContainer \
--name dataContainer2 ubuntu
进入dataContainer2容器编辑/dataVol数据卷下文件内容:
docker exec -it dataContainer2 /bin/bash
2.数据卷容器数据迁移
利用数据卷容器对数据卷进行数据的备份与恢复,实现数据的迁移。
备份
备份数据卷容器dataContainer 内的数据卷到本地${pwd}和容器worker 数据卷backup目录下:
docker run --itd --volumes-from dataContainer \
-v ${pwd}:/backup --name worker ubuntu \
tar cvf /backup/backup.tar /dataVol
运行容器worker 时,挂载数据卷容器dataContainer内所有数据卷;将本地当前目录挂载至容器worker目录/backup;数据卷容器dataContainer内数据卷/dataVol压缩为backup.tar文件,存储在数据卷容器worker数据卷/backup/下,且在本地${pwd}目录下同时映射。
恢复
1 创建带有空数据卷的数据卷容器worker
docker run --itd -v destDataVol --name worker ubuntu /bin/bash
2 将本地数据恢复至数据卷容器worker
docker run --volumes-from worker -v ${pwd}:/backup \
tar xvf /backup/backup.tar
本地/backup/backup.tar文件解压后同步至数据卷容器worker数据卷/backup内