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 #存放宿主机内存中

 

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

 #查看

扫描二维码关注公众号,回复: 8640075 查看本文章

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  

发布了19 篇原创文章 · 获赞 149 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/truelove12358/article/details/103052128