• ubuntu-docker入门到放弃(六)数据管理


    在docker的数据管理中,有两个概念:

    1、数据卷

      数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:

        1.1 数据卷可以在容器之间共享和重用

        1.2 对数据卷的修改会立刻生效

        1.3 对数据卷的更新,不会影响镜像

        1.4 卷会一直存在,直到没有容器使用

      数据卷的使用,类似linux系统中的mount操作。

    2、数据卷容器

      数据卷容器,其实就是一个普通的容器,只不过是挂载一个数据卷目录,供其他容器共享和持续更新数据来使用。

    下面介绍数据卷以及数据卷容器的使用示例:

    一、数据卷:

    在运行docker run的时候,使用-v参数可以挂载数据卷,多次使用-v 可以挂载多个数据卷

    #docker run -dit --name datatest -v /home/linkface/dockerdir:/data nginx:1.7 /bin/bash

    上面的命令是运行一个容器datatest,将宿主机的dockerdir目录,挂载到容器中的/data/目录,在/data/中创建修改文件,本地的dockerdir目录可以查看到。

    #cd /data
    #touch 123
    #ls -l
    -rw-r--r-- 1 root root 0 Nov  7 07:28 123

    发现我们的宿主机也同时有了这个文件,这个在做测试的时候非常方便,可以将本地代码或者测试文件通过数据卷映射到容器内。

    ***本地路径一定要使用绝对路径,容器路径如果没有,会自动创建。***

    上面是通过目录的方式挂载,其实也可以挂载文件:

    #docker run --rm -dit -v ~/.bash_history:/.bash_history nginx:1.7 /bin/bash

    不过直接挂载文件不推荐使用,因为一旦使用vi,vim,sed等工具编辑修改文件,有可能导致inode改变,导致报错,故建议挂载目录。

    二、数据卷容器:

    数据卷容器,顾名思义,就是启动一个容器,来单独当做数据卷来使用,数据卷容器的特点是方便在容器之间共享和更新数据。

    #docker run -dit --name dbdata -v /home/linkface/dockerdir:/dbdata centos /bin/bash

    创建一个数据卷容器,挂载本地dockerdir到容器的dbdata

    接下来,我们创建新的容器,但是使用dbdata容器的dbdata目录作为数据卷:

    挂载数据卷容器内的数据卷,要使用--volumes-from 参数

    #docker run -dit --name db1 --volumes-from dbdata nginx:1.7 /bin/bash
    #docker run -dit --name db2 --volumes-from dbdata nginx:1.7 /bin/bash

    依次查看各个容器的数据卷:

    先查看第一个创建的数据卷容器的数据卷情况:

    新建的两台db1跟db2的:

    可以看出来是共用的,我们新建一个文件试试:

    去其他容器看一下:

    这样就做到了容器之间的数据共享,以及持续更新。

    如果删除了挂载的容器,数据卷并不会自动删除,如果要删除,需要在最后一个还挂载着他的容器时使用docker rm -v 命令,来删除指定同时删除关联的容器。

    三、利用数据卷容器迁移数据

      3.1备份

      可以利用数据卷容器对其中的数据进行备份、恢复,以实现数据的迁移。

      

    #docker run --volumes-from dbdata -v $(pwd):/backup centos tar cvf /backup/backup.tar /dbdata
    /dbdata/
    /dbdata/123
    /dbdata/mydata
    tar: Removing leading `/' from member name

    解释一下上面的命令:

    运行一个容器,挂载dbdata的数据卷,并且将本地的当前目录,映射到容器的/backup ,然后执行压缩命令,将dbdata,打包到容器的/backup/下,也就是映射的本地目录。

    backup.tar就是我们刚刚从dbdata上备份下来的数据。

      3.2 恢复

      如果要恢复数据到一个容器,跟刚才的命令类似:

      首先,创建并运行一个容器:

      我们只是使用-v 在容器内等于共享了一个dbdata,但是实际上没有将它映射到任何目录。

    #docker run -dit --name db3  -v /dbdata centos /bin/bash

      开始恢复:

    #docker run --volumes-from db3 -v $(pwd):/backup centos tar xvf /backup/backup.tar

    解释一下上面的命令:

    创建并运行一个容器,挂载db3的dbdata,并且将本地当前目录,映射成容器内的/backup目录,然后解压,此时,数据将被解压到db3的dbdata中。

      

  • 相关阅读:
    Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Window': An object could not be cloned.
    iframe的坑
    echarts展示
    常量
    变量赋值
    变量声明
    变量初始化
    windows下nvm的安装及使用
    sessionStorage 使用方法
    jquery+ajax获取本地json对应数据
  • 原文地址:https://www.cnblogs.com/slim-liu/p/9913123.html
Copyright © 2020-2023  润新知