docker存储volume

#环境 centos7.4 , Docker version 17.12.0-cedocker volume创建、备份、nfs存储#docker volume数据存容器内,删容器即销毁全部数据要保留的数据(数据持久化),需存储在容器外docker volume是文件或目录,mount到docker容器中使用docker volumebind muount #挂载任意目录或文件Volumes #固定路径的目录,docker管理tmpfs mounts #存放宿主机内存中imagedocker volume 官网文档地址 https://docs.docker.com/storage/volumes/#bind muount实例 #docker挂载文件或目录到容器 #创建目录及文件mkdir -p /data/test1echo 'docker volume'>/data/test1/test.txt #创建容器,-v 挂载目录(默认读写权限)docker run -dit --name busybox1 -v /data/test1:/data/test1 busybox #查看docker exec busybox1 cat /data/test1/test.txt #修改文件后,在查看本地是否更改docker exec busybox1 echo my files>>/data/test1/test.txtdocker exec busybox1 cat /data/test1/test.txtcat /data/test1/test.txt为保证Dockerfile可移植,构建镜像不能使用bind muount#tmpfs mounts# 使用--tmpfsdocker run -dit --name tmpfs-test --tmpfs /app busybox#Volumes#不指定挂载目录,默认目录/var/lib/docker/volumes/#使用Volumes#不指定挂载目录,自动创建 volumes/<ID号>/_data/docker run -dit --name busybox2 -v /data/test busybox#在容器创建目文件docker exec busybox2 touch /data/test/test2.txt#在宿主机查看文件路径find /var/lib/docker/volumes -name test2.txtdocker inspect busybox2 |grep Source#docker volume命令管理 #创建volumedocker volume create volume-test1 #查看参数docker inspect volume-test1 #使用volumedocker run -dit --name busybox3 -v volume-test1:/volume busybox #查看docker inspect -f {{.Mounts}} busybox3 #查看docker数据卷docker volume ls #删除没使用的数据卷(谨慎使用)docker volume pruneBind mounts和volumes都通过-v或--volume挂载,tmpfs使用--tmpfs三种都可以使用--mount挂载,格式更清晰,官方推荐使用#docker volume 数据共享挂载相同目录使用volume container#数据卷容器 volume container# --volumes-from 容器名,就会传递容器的挂载目录(volume参数传递) #创建容器busybox4(不需要启动)mkdir -p /data/test2echo 'busybox4'>/data/test2/test.txtdocker create --name busybox4 -v /data/test2:/data/test2 busybox # --volumes-from 使用其它容器的volumedocker run -dit --name busybox5 --volumes-from busybox4 busybox #查看docker exec busybox5 cat /data/test2/test.txt #挂载多个 数据卷容器docker run -dit --name busybox6 --volumes-from busybox4 --volumes-from busybox1 busyboxdocker exec busybox6 ls /data/ #查看#docker volume 备份备份volume挂载目录使用容器--volumes-from备份#使用数据卷容器备份busybox4的volumesdocker run --rm --volumes-from busybox4 -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data/test2/.以上docker volume实例,全部在单台docker主机docker集群环境,需要使用共享存储、分布式存储#docker volume使用NFS存储 #NFS服务端,配置nfs共享yum install nfs-utils rpcbind -ymkdir -p /data/nfs/dockerecho "/data/nfs *(rw,no_root_squash,sync)">>/etc/exportsexportfs -rsystemctl start rpcbind nfs-serversystemctl enable rpcbind nfs-servershowmount -e localhost #nfs客户端yum install -y nfs-utils rpcbind #创建volume 连接 172.16.50.43:/data/nfsdocker volume create --driver local --opt type=nfs --opt o=addr=172.16.50.43,rw --opt device=:/data/nfs volume-nfs #查看docker volume lsdocker volume inspect volume-nfs #容器使用volume-nfsdocker run -dit --name busybox7 -v volume-nfs:/nfs busybox #查看docker inspect -f {{.Mounts}} busybox7df -h |grep /data/nfs #volume目录/var/lib/docker/volumes/volume-nfs/_data自动挂载到了nfs服务上 #容器创文件测试docker exec busybox7 touch /nfs/testfiles.txt#使用volume driver 可实现更多的backend#删除测试容器,volumedocker rm -f -v tmpfs-test busybox{1,2,3,4,5,6,7} #-f 强制删除,-v 删除volume docker volume prune

赞 (0)