• Docker 0x06: Docker Volume卷


    Docker Volume卷

    在容器技术介绍篇,我们提到过容器的难点在构建网络和文件存储。容器的文件系统虽然可以保存数据,但是容器中的,容器本身是不可迁移的,只能导出其中的文件系统,但是导出文件系统不是迁移容器的最佳实践,最佳实践是镜像。但是镜像是静态数据。改变容器文件系统的东西是不会影响到镜像的。所以就有了挂在volume实践。在build应用镜像的时候,就通过VOLUME给容器创建挂载点,可以挂在宿主机的卷或者其它容器的卷。至此,我们知道了为什么要有volume,因为要持久化容器产生的数据。那本文将说明docker volume是什么,怎么使用挂载,容器间共享同步,迁移备份还原数据。

    一句话什么是docker volume?

    docker volume是docker容器对应使用的外界存储。

    docker volume特性

    1. 如果镜像的挂载点有数据,那么会通过COPY ON WRITE技术写道数据卷里。也就是被挂在后数据将显示被挂载的卷的数据,取消挂在后,原挂载点的数据会出现。
    2. 容器读取volume中的数据和宿主机操作数据是同步的,立马生效。
    3. 数据券是可以共享和重用的,多个容器可以使用同一个数据券。类似多主机间NFS共享。
    4. 从以上可以得到另一个特性,容器,数据券,镜像能相互独立存在。
    5. 容器删除,对应的挂在券数据不会丢失。
    6. 容器操作数据券的IO性能,就是具体数据券所在硬件设备的IO性能。

    docker 挂载卷

    1. 数据券是外界的,一般就是宿主机文件系统中的一个目录。
    2. 可以在docker 层面创建一个券引用名,通过该引用名可以挂在到容器的挂在点上。当然也可以直接使用文件系统存在目录作为数据券来挂载。
    3. 挂在点也是可以预先在dockerfile中通过VOLUME创建。在启动时会自动在/var/lib/docker/volumes/下随机创建一个券目录,作为挂载点对应的数据券。
    4. 当然,也可以docker volume create v_name 或者dockerfile中 VOLUME 挂载点都没有操作。直接在docker run -v 券:挂载点 ,在从镜像启动容器时,直接设置容器外和容器内目录的挂载。

    docker 多容器间共享数据券

    要实现这个,不是通过每个容器都挂载相同的物理数据券来实现,而是通过第一个容器挂载数据券后。后面的容器在docker run时,指定一个--volumes-from 第一个dockerid,这样新建的容器就会同第一个容器一样,有相同挂载点对应数据卷。我们通常称第一个容器是“数据卷容器”

    删除,查看数据卷

    1. 常看:docker volume ls 列出所有通过docker volume create的卷;docker volume inspect vol_id 常看券详情。
    2. 删除:docker volume rm vol_id

    备份还原数据卷

    应用产生的数据是非常重要的,数据持久化到数据卷后,持久化数据的备份和迁移还原也是数据卷使用的重要操作。

    1. 备份volume
      备份一个容器的volume,通过启动一个新容器,共享要备份的目标容器,在新容器新挂在备份的目录在新容器的另一个挂载点;由于新容器同时共享了目标容器的volume,所以在新容器中执行tar 共享挂载点数据 放到新挂载点,同时启动新容器时指定--rm,这样就可以在新容器的新挂载点对应的数据卷中找到备份的数据了。
      命令如下:已经知道存在docker容器docker1 其有一个数据卷要备份时/data
      docker run -it --volumes-from docker1 -v /tmp/backup/:/backup --name docker_bk --rm ubuntu tar cvf /backup/docker1.tar /data
      执行成功的话,会炸/tmp/backup/下看到docker1.tar
      这种方式是最专业和正确的操作。

    2. 还原volume
      恢复基本原理一样,也是将新容器启动后,作为数据卷容器,然后再启动第二个容器,挂载备份数目录,并--volumes-from 第一个容器,执行tar xvf 数据到第一个容器的卷中。

    docker run -it --name docker_recover -v test_vol:/data ubuntu /bin/bash
    docker run --rm --volumes-from docker_recover -v /tmp/backup/:/backup ubuntu tar xvf /backup/docker1.tar -C /data

    小结

    1. 数据卷的挂载
    2. 容器间共享数据卷和数据卷容器
    3. 利用数据卷容器思想,备份和恢复目标容器的目标数据卷
  • 相关阅读:
    【转】灰色在PPT中的运用
    [转]多多“亦”善:把大量内容放到一页PPT的5个技巧
    android应用程序的安装方式与原理
    oracle 数据库 date + 1 转载
    运行ant脚本(转载)
    Oracle修改字段类型方法总结(转)
    转载 jQueryEasyUI Messager基本使用
    oracle dmp数据导入
    oracle 查看表的索引信息
    sqlplus 分析执行计划
  • 原文地址:https://www.cnblogs.com/ZJiQi/p/11149370.html
Copyright © 2020-2023  润新知