docker存储volume #环境 centos7.4 , Docker version 17.12.0-ce docker volume创建、备份、nfs存储 #docker volume 数据存容器内,删容器即销毁全部数据 要保留的数据(数据持久化),需存储在容器外 docker volume是文件或目录,mount到docker容器中使用 docker volume bind muount #挂载任意目录或文件 Volumes #固定路径的目录,docker管理 tmpfs mounts #存放宿主机内存中 image docker volume 官网文档地址 https://docs.docker.com/storage/volumes/ #bind muount实例 #docker挂载文件或目录到容器 #创建目录及文件 mkdir -p /data/test1 echo ‘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.txt docker exec busybox1 cat /data/test1/test.txt cat /data/test1/test.txt 为保证Dockerfile可移植,构建镜像不能使用bind muount #tmpfs mounts # 使用--tmpfs docker run -dit --name tmpfs-test --tmpfs /app busybox #Volumes #不指定挂载目录,默认目录/var/lib/docker/volumes//_data/ #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.txt docker inspect busybox2 |grep Source #docker volume命令管理 #创建volume docker volume create volume-test1 #查看参数 docker inspect volume-test1 #使用volume docker run -dit --name busybox3 -v volume-test1:/volume busybox #查看 docker inspect -f {{.Mounts}} busybox3 #查看docker数据卷 docker volume ls #删除没使用的数据卷(谨慎使用) docker volume prune Bind mounts和volumes都通过-v或--volume挂载,tmpfs使用--tmpfs 三种都可以使用--mount挂载,格式更清晰,官方推荐使用 #docker volume 数据共享 挂载相同目录 使用volume container #数据卷容器 volume container # --volumes-from 容器名,就会传递容器的挂载目录(volume参数传递) #创建容器busybox4(不需要启动) mkdir -p /data/test2 echo ‘busybox4‘>/data/test2/test.txt docker create --name busybox4 -v /data/test2:/data/test2 busybox # --volumes-from 使用其它容器的volume docker 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 busybox docker exec busybox6 ls /data/ #查看 #docker volume 备份 备份volume挂载目录 使用容器--volumes-from备份 #使用数据卷容器备份busybox4的volumes docker 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 -y mkdir -p /data/nfs/docker echo "/data/nfs *(rw,no_root_squash,sync)">>/etc/exports exportfs -r systemctl start rpcbind nfs-server systemctl enable rpcbind nfs-server showmount -e localhost #nfs客户端 yum install -y nfs-utils rpcbind #创建volume 连接 172.16.50.43:/data/nfs docker volume create --driver local --opt type=nfs --opt o=addr=172.16.50.43,rw --opt device=:/data/nfs volume-nfs #查看 docker volume ls docker volume inspect volume-nfs #容器使用volume-nfs docker run -dit --name busybox7 -v volume-nfs:/nfs busybox #查看 docker inspect -f {{.Mounts}} busybox7 df -h |grep /data/nfs #volume目录/var/lib/docker/volumes/volume-nfs/_data自动挂载到了nfs服务上 #容器创文件测试 docker exec busybox7 touch /nfs/testfiles.txt #使用volume driver 可实现更多的backend #删除测试容器,volume docker rm -f -v tmpfs-test busybox{1,2,3,4,5,6,7} #-f 强制删除,-v 删除volume docker volume prune
将数据从宿主机挂载到容器中的三种方式
Docker提供三种方式将数据从宿主机挂载到容器中:
•volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
•bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
•tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
Volume
管理卷:
# docker volume create nginx-vol
# docker volume ls
# docker volume inspect nginx-vol
用卷创建一个容器:
# docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
# docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
清理:
# docker stop nginx-test
# docker rm nginx-test
# docker volume rm nginx-vol
注意:
1.如果没有指定卷,自动创建。
2.建议使用--mount,更通用。
https://docs.docker.com/engine/admin/volumes/volumes/#start-a-container-with-a-volume
Bind Mounts
用卷创建一个容器:
# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
# docker run -d -it --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
验证绑定:
# docker inspect nginx-test
清理:
# docker stop nginx-test
# docker rm nginx-test
注意:
1.如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
2.如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。
https://docs.docker.com/engine/admin/volumes/bind-mounts/#start-a-container-with-a-bind-mount
原文:https://www.cnblogs.com/linux985/p/11398447.html