zoukankan      html  css  js  c++  java
  • docker volume创建、备份、nfs存储

    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  
    
  • 相关阅读:
    uniapp 画圆形或多边形雷达图
    uniApp开发之公用配置文件common.js
    FastAdmin 表格排序
    fastadmin SelectPage field显示多个字段
    PHP装饰器模式
    PHP原型模式,(理解:创建并初始化对象,再复制一个对象避免重复初始化)
    PHP设计模式-观察者模式
    为什么 echo 3 . print(2) . print(4) . 5 . 'c'的结果是45c2131
    PHP数组式访问接口ArrayAccess用法分析
    浏览器兼容性问题总结
  • 原文地址:https://www.cnblogs.com/elvi/p/8463673.html
Copyright © 2011-2022 走看看