zoukankan      html  css  js  c++  java
  • Docker数据管理

    1. docker存储资源类型

      用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理:

        (1)Data Volume (数据卷);

        (2)Data Volume Dontainers --- 数据卷容器。

    2. 数据卷 DataVolume

      Data Volume 本质上是 Docker Host 文件系统中的目录或文件,使用类似与 Linux 下对目录或者文件进行 mount 操作。数据卷可以在容器之间共享和重用,对数据卷的更改会立马生效,对数据卷的更新不会影响镜像,卷会一直存在,直到没有容器使用。

    1> Data Volume 有以下特点:

         a)Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。

          b)容器可以读写 volume 中的数据。

          c)volume 数据可以被永久的保存,即使使用它的容器已经销毁。

    2> DataVolume的使用

      通过-v 参数格式为 <host path>:<container path>

      a)运行一个容器,并创建一个数据卷挂载到容器的目录上

    [root@alph ~]# docker run -itd -v /web centos:6 /bin/bash
    5d6d2585218274be7b468ef62df1391e9719619408d856effac36f616f0b3fac
    [root@alph ~]# cd /
    [root@alph /]# ls                                                 #跟下面没有web挂载点
    bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
    boot  etc  lib   media  opt  root  sbin  sys  usr
    [root@alph ~]# docker exec -it 5d6d2585218274be7b468ef62df1391e9719619408d856effac36f616f0b3fac /bin/bash
    [root@5d6d25852182 /]# ls
    bin  etc   lib    lost+found  mnt  proc  sbin     srv  tmp  var
    dev  home  lib64  media       opt  root  selinux  sys  usr  web  #数据卷

     

    利用 centos:7.0 的镜像运行一个容器,并在容器内创建一个数据卷挂载到容器的 /web 目录上

    b)运行一个容器,本地创建/test目录,挂载到容器的/web目录上

    [root@alph ~]# mkdir test
    [root@alph ~]# cd test
    [root@alph test]# touch a d c
    [root@alph test]# cd
    [root@alph ~]# ls
    192.168.16       centos.tar.gz  docker           test
    anaconda-ks.cfg  doc_file       registry.tar.gz  yum-repo.sh
    [root@alph ~]# docker run -itd -v /root/test:/web centos:6 /bin/bash  #映射本地目录到数据卷
    409d2ea1236e26028a20e983bfeae04613c20b4d89548ff873dfe7f118a94766
    [root@alph ~]# docker exec -it 409d2ea1236e26028a20e983bfeae04613c20b4d89548ff873dfe7f118a94766 /bin/bash
    [root@409d2ea1236e /]# cd /web/
    [root@409d2ea1236e web]# ls
    a  c  d

    在运行的容器内创建一个文件,然后再删除该容器,查看数据卷内数据是否存在。

    [root@409d2ea1236e web]# echo "you are beautiful" > zxj
    [root@409d2ea1236e web]# exit
    exit
    [root@alph ~]# docker stop  409d2ea1236e26028a20e983bfeae04613c20b4d89548ff873dfe7f118a94766
    [root@alph ~]# docker rm  409d2ea1236e26028a20e983bfeae04613c20b4d89548ff873dfe7f118a94766    
    [root@alph ~]# ls
    192.168.16       centos.tar.gz  docker           test
    anaconda-ks.cfg  doc_file       registry.tar.gz  yum-repo.sh
    [root@alph ~]# cd test                                        #数据卷内数据还存在
    [root@alph test]# ls
    a  c  d  zxj
    [root@alph test]# cat zxj
    you are beautiful

    3. 数据卷容器

      数据卷容器Data Volume Dontainers

      如果用户需要在容器之间共享一些持续更新的数据,最简单的方法就是使用数据卷容器,其实数据卷容器就是一个普通的容器,只不过是专门用它提供数据卷供其他容器挂载使用。

    Data Volume Dontainers使用:

    a)创建一个名为 dbdata 的数据卷,并在其中创建一个数据卷挂载到 /test下

    [root@alph test]# docker run -it -v /root/test:/dbdate --name dbser centos:6
    [root@ad2e4c1651ee /]# ls
    bin  dbdate  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
    [root@ad2e4c1651ee /]# cd dbdate/
    [root@ad2e4c1651ee dbdate]# ls
    a  c  d  zxj
    [root@ad2e4c1651ee dbdate]#exit
    [root@alph test]# docker start ad2e4c1651ee
    ad2e4c1651ee

    数据卷容器创建完成。

    --name 参数为给容器指定名字为dbser方便记忆

    3> 其他容器使用 --volumes-from命令去挂载dbdata数据卷

    [root@alph ~]# docker run -itd --volumes-from dbser --name db1 centos:6
    f107f0e239478a3ec3b0d42eb2bce69fb54f1b079a9c22d6ac1248570c5840ed
    [root@alph ~]# docker run -itd --volumes-from dbser --name db2 centos:6
    5aa6a95b299aa5edcab8d7761a9ca95c46afc221bd74ac5ce6a5d160c60eeeee

    此时,容器 db1 和 db2 同时挂载了同一个数据卷到本地相同 /dbdata目录。三个容器任何一个目录下的写入,都可以时时同步到另外两个。

    [root@alph ~]# docker exec -it db1 /bin/bash
    [root@f107f0e23947 /]# ls
    bin     dev  home  lib64       media  opt   root  selinux  sys  usr
    dbdate  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var
    [root@f107f0e23947 /]# cd dbdate/
    [root@f107f0e23947 dbdate]# ls
    a  c  d  zxj
    [root@f107f0e23947 dbdate]# touch 123
    [root@f107f0e23947 dbdate]# exit
    exit
    
    [root@alph ~]# docker exec -it db2 /bin/bash
    [root@5aa6a95b299a /]# ls
    bin     dev  home  lib64       media  opt   root  selinux  sys  usr
    dbdate  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var
    [root@5aa6a95b299a /]# cd dbdate/
    [root@5aa6a95b299a dbdate]# ls
    123  a  c  d  zxj
    [root@5aa6a95b299a dbdate]#

    删除相应的容器,再查看数据卷数据

    [root@alph ~]# docker stop db1
    db1
    [root@alph ~]# docker stop db2
    db2
    [root@alph ~]# docker stop dbser
    dbser
    
    删除数据卷容器dbser
    [root@alph ~]# docker rm dbser 
    dbser
    
    数据还存在于数据卷
    [root@alph ~]# cd test
    [root@alph test]# ls
    123  a  c  d  zxj
    [root@alph test]#
  • 相关阅读:
    【BZOJ1489】[HNOI2009]双递增序列(动态规划)
    【BZOJ1488】[HNOI2009]图的同构(Burside引理,Polya定理)
    【BZOJ4888】[TJOI2017]异或和(树状数组)
    【BZOJ1487】[HNOI2009]无归岛(动态规划)
    【BZOJ1485】[HNOI2009]有趣的数列(组合数学)
    【BZOJ1484】[HNOI2009]通往城堡之路 (贪心)
    【BZOJ1452】[JSOI2009]Count(树状数组)
    【BZOJ1449】[JSOI2009]球队收益(网络流,费用流)
    【BZOJ1444】[JSOI2009]有趣的游戏(高斯消元,AC自动机)
    【BZOJ1434】[ZJOI2009]染色游戏(博弈论)
  • 原文地址:https://www.cnblogs.com/ajunyu/p/11213292.html
Copyright © 2011-2022 走看看