• docker——数据管理


    生产环境中使用docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享。
    容器中管理数据主要有两种方式:
    数据卷(Date Volumes):容器内数据直接映射到本地环境
    数据卷容器(Date Volumes Containers):使用特定容器维护数据卷


    1.数据卷

    数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux的mount操作
    数据卷有许多有用的特性:

    • 数据卷可以在容器之间共享和重用,容器间传递数据会变得高效简单
    • 对数据卷内数据的修改会立马生效,无论是容器内的操作还是本地操作
    • 对数据卷的更新不会影响镜像,解耦了应用和数据
    • 卷会一直存在,直到没有容器使用,可以安全的卸载它

     一般对数据卷的操作有以下三种方式:

    (1)在容器内创建一个数据卷

    在使用docker run或者docker create创建一个容器的时候,可以使用-v参数在容器内创建一个数据卷。
    多次重复使用-v参数可以创建多个数据卷。

    创建容器con_test004,并创建数据卷date_test:

    启动容器:

    进入容器查看数据卷:

     (2)挂载一个主机目录作为数据卷

    在使用docker run或者docker create创建一个容器的时候,可以使用-v参数指定挂载一个本地已有的目录到容器中去作为数据卷。

    在本地创建一个目录:

      创建容器con_test005,并将date目录挂载到容器中:

      Docker挂载数据卷的默认权限时读写(rw),用户也可以通过ro指定为只读。

      注意在挂载的时候都要使用绝对路径。否则会自动创建。

     (3)挂载一个本地主机文件作为数据卷

    -v也可以从主机挂载单个文件到容器中作为数据卷。
    在本地创建一个文件:

    创建一个新的容器并进行挂载:

    进入容器,该文件已经存在:

    不推荐直接挂载文件到容器内,也许会有意外的麻烦。

    2.数据卷容器

    如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
    数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其它容器挂载。

    创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:

    在其它容器使用--volumes-from来挂载dbdata容器中的数据卷。
    下面创建容器db1和db2,并且将dbdata容器中的数据卷挂载。
    需要注意的是,-volumes-from会自动找到数据卷容器中的挂载卷,并将其标记

    创建db1:

    创建db2:

      三个容器中任何一个容器在挂载卷下写入内容,其它容器都会看到。

     在dbdata中创建一个文件,并写入内容:

    查看db1和db2,发现数据已经同步:

    可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。

    注意在使用--volumes-from参数所挂载数据卷的容器自身并不需要保持运行状态

    如果删除了db3,发现db4依然能够同部dbdata的数据,说明它还是绑在dbdata这个容器上面。
    删除db2,没有任何影响。
    如果关闭dbdata数据卷容器,并不会影响数据的共享。
    如果删除dbdata数据库容器,也不会影响数据的共享,说明数据卷依然存在。
    如果想要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v来指定同时删除关联容器。

    3.利用数据卷容器来移动数据

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

    (1)备份

     现在要将db1的dbdata备份到宿主机的data目录下。

    过程如下:

      dockers run -it --name worker docker.io/centos  创建一个容器worker
      --volumes-from db1  让worker来挂载dbdata数据卷
      -v /data:/backup    挂载本地的data目录到worker容器的backup目录
      tar cvf /backup/backup.tar /dbdata  容器启动后,将dbdata下面的内容备份为容器内的/backup/backup.tar,即宿主机当前目录下下的backup.tar

     (2)恢复

    如果要将数据恢复到一个容器,有如下步骤:

    首先创建一个带有数据卷的容器dbdata2:

    docker run -v /dbdata --name dbdata2 ubuntu /bin/bash  #这个容器就是一个数据卷容器

    然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:

    docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf
  • 相关阅读:
    vue项目发布到服务器之后出现空白页和图片找不到的问题
    H5中设置一个元素一直在页面的最底部
    vue项目打包出现的问题(日常记录)
    vue写H5注册页面
    vue项目中动态图片生成
    Java中boolean类型占用多少个字节
    Java将一个目录下的所有数据复制到另一个目录下
    Java使用递归找出某目录下的所有子目录以及子文件
    实现短信验证码
    C#连接Oracle数据库(直接引用dll使用)
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/10151434.html
Copyright © 2020-2023  润新知