一。bind mount数据卷的挂载(用主机的有内容文件挂载于容器空文件)
简单的挂载方式:docker run -it --rm --name test1 -v /lee:/data1:rw -v /etc/passwd:/data2/passwd busybox(-v表挂载,将主机的/lee目录挂载于容器的data1目录,并且设置rm已读模式)
二。数据卷的docker managed(使用空文件去指定容器的有内容文件)
1.bind mount必须指定host文件系统路径,限制了移植性
2.docker managed volume不需要指定mount源,docker自动为容器创建数据卷目录
3.默认创建的数据卷目录都在/var/lib/docker/volumes中
4.如果挂载时指定容器内已有目录,原有数据会被复制到/var/lib/docker/volume中
5.docker清理卷轴的方法:docker volume prune
mysql数据卷的挂载命令:
1.创建本地挂载目录:docker volume create mysqldate(该目录会被存储于/var/lib/docker/volume内)
2.内容的改在:docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=lee -v mysqldate:/var/lib/mysql mysql:5.7
3.查看容器挂载点:dockers inspect mysql
注释:容器内的mysql信息保存于主机的/var/lib/docker/volumes/mysqldate/_date内,如果将mysql容器删除的话,内容依然存在
4.查看所有的容器挂载内容:docker volume ls
5.删除单个挂载点:docker volume rm mysqldate
6.删除所有挂载点:docker volume prune(谨慎使用)
三。bind mount和docker managed volume的对比
四。备份与迁移数据卷:
1.数据迁移
docker run -it --volumes-from mysql --rm --name test1 busybox
注释:--volumes-from去指向数据容器的名称,数据会被存在于数据容器的挂载点上
2.数据备份
docker volume create leevol1:创建docker卷
mkdir data1:创建目录
tar zcf data1.tar.gz data1:对于data1进行打包,外主机打包内容
docker run -it --rm --name test -v leevol1:/data1 -v `pwd`:/backup busybox /bin/sh -c "tar zxf /backup/data1.tar.gz;/bin/sh"(将leevol1挂载容器data1,将含有压缩包的目录挂载到容器的backup,它解包的是挂载到容器内/backup
目录下的data1.tar.gz
文件,容器内进行解包)
leevol1
是一个 Docker 命名数据卷的名称。如果该数据卷不存在,Docker 会自动创建它。
/data1
是容器内的挂载点,意味着将宿主机上的 leevol1
数据卷挂载到容器内的 /data1
目录。这样,容器内对 /data1
目录的读写操作实际上是在操作宿主机上的数据卷。
pwd
是一个反引号包裹的命令,在 Linux 中,反引号用于执行命令并将其输出作为当前命令的一部分。pwd
命令会输出当前工作目录的绝对路径,所以这里是将宿主机的当前工作目录挂载到容器内的 /backup
目录。这使得容器可以访问宿主机当前目录下的文件,例如后续要解压的 data1.tar.gz
文件。