zoukankan      html  css  js  c++  java
  • Docker容器的数据卷

    docker volumes

    什么是数据卷?
    数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或者多个容器提供访问,数据卷设计的目的,在于数据的永久话,它完全独立与容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理,同一个数据卷可以只支持多个容器的访问。
    
    数据卷的特点:
    1.数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中
    2.数据卷可以在容器之间共享和重用
    3.可以对数据卷里的内容直接进行修改
    4.数据卷的变化不会影像镜像的更新
    5.卷会一直存在,即使挂载数据卷的容器已经被删除
    
    数据卷的使用:
    1.为容器添加数据卷
    docker run -v /datavolume:/data -it centos /bin/bash
    
    如:
    mkdir /datavolume
    docker run --name volume -v ~/datavolume:/data -itd centos  /bin/bash
    注:datavolume为宿主机目录,data为docker启动的volume容器的目录
    这样在宿主机的/datavolume目录下创建的数据就会同步到容器的/data目录下
    
    (1)为数据卷添加访问权限
    docker run --name volume1 -v ~/datavolume1:/data:ro -itd centos  /bin/bash
    添加只读权限之后在docker容器的/data目录下就不能在创建文件了,为只读权限;在宿主机下的/datavolume1下可以创建东西
    2.使用dockerfile构建包含数据卷的镜像
    dockerfile指令:
    volume[“/data”]
    cat  dockerfile
    FROM centos
    VOLUME ["/datavolume3","/datavolume6"]
    CMD /bin/bash
    
    使用如下构建镜像
    docker build -t="volume" .
    
    启动容器
    docker run --name volume-dubble -it volume
    
    会看到这个容器下有两个目录,datavolume3和datavolume6
    
    7.Docker的数据卷容器
    什么是数据卷容器:
    命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器
    挂载数据卷容器的方法
    docker run --volumes-from [container name]
    例:
    docker run --name data-volume -itd volume(volume这个镜像是上面创建的带两个数据卷的镜像,datavolume3,ddatavolume6)
    docker exec -it data-volume /bin/bash(进入到容器中)
    touch datavolume6/lucky.txt
    退出容器exit
    
    创建一个新容器挂载刚才data-volume这个容器创建的数据卷
    docker run --name data-volume2 --volumes-from  data-volume -itd centos /bin/bash
    进入到新创建的容器
    docker exec -it data-volume2 /bin/bash
    查看容器的/datavolume6目录下是否新创建了lucky.txt文件
    cd /datavolume6
    可以看见有刚才在上一个容器创建的文件lucky.txt
    
    8.docker数据卷的备份和还原
    数据备份方法:
    docker run  --volumes-from [container name] -v $(pwd):/backup centos tar czvf /backup/backup.tar [container data volume]
    
    例子:
    docker run --volumes-from data-volume2  -v  /root/backup:/backup --name datavolume-copy centos tar zcvf /backup/data-volume2.tar.gz /datavolume6
     
    
    可以看见已经备份成功了
    
    数据还原方法:
    docker run --volumes-from [container name] -v $(pwd):/backup centos tar xzvf /backup/backup.tar.gz [container data volume]
    
    例:
    docker exec -it data-volume2 /bin/bash
    cd /datavolume6
    rm -rf lucky.txt
    
    docker run --volumes-from data-volume2 -v /root/backup/:/backup centos tar zxvf /backup/data-volume2.tar.gz -C /datavolume6
    
    docker exec -it data-volum2 /bin/bash
    cd /datavolum6
    可以看到还原后的数据
  • 相关阅读:
    runtest.sh
    写代码:简单的三元运算
    写代码:用户交互显示类似省市县三级联动的选择
    写代码:列举布尔值是False的所有值
    写代码:求集合
    写代码:利用For循环和while输出1-100
    写代码:利用for循环和range输出9*9乘法表
    写代码:查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的元素。
    写代码:利用下划线将列表的每个元素拼接成字符串,li=["alex","eric","rain"]
    写代码:购物车程序
  • 原文地址:https://www.cnblogs.com/faberbeta/p/13541169.html
Copyright © 2011-2022 走看看