• 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/
    
    #使用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
  • 相关阅读:
    CGCDSSQ
    100200H
    斗地主
    借教室
    bzoj 3743
    17B
    能量项链
    589
    16-求连续数组和最大
    15-幸运数组4、7
  • 原文地址:https://www.cnblogs.com/kcxg/p/10772764.html
Copyright © 2020-2023  润新知