如果Data Volume 中存放的是重要的应用数据,如何管理volume对应用至关重要。
 
前面学习了volume的创建、共享和使用,现在开始学习如何备份、恢复、迁移和销毁。
 
volume 备份
 
因为volume实际上是host文件系统中的目录和文件,所以volume的备份实际上是对文件系统的备份
 
下面例子中我们只需要定期备份host上的 /myregistry 目录即可
 
root@docker-lab:~/020# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2Unable to find image 'registry:2' locally    #    运行本地Registry容器
2: Pulling from library/registry
cd784148e348: Pull complete
0ecb9b11388e: Pull complete
918b3ddb9613: Pull complete
5aa847785533: Pull complete
adee6f546269: Pull complete
Digest: sha256:1cd9409a311350c3072fe510b52046f104416376c126a479cef9a4dfe692cf57
Status: Downloaded newer image for registry:2
f9e7d22e21d6e0c03b146a3e2100c135c14203308c4323b0673c45eaea97030d
 
 
volume 恢复
 
volume的恢复也很简单,如果数据损坏了,直接把之前的备份恢复到 /myregistry 目录即可
 
volume 迁移
 
如果我们想使用最新版本的registry,这就涉及到数据迁移,也很简单
 
    1、docker stop 当前registry
    2、启动新版的的registry,并mount原有volume
 
volume 销毁
 
可以删除不在需要的volume,但一定要确保知道自己正在做什么,volume删除后数据是找不回来的。
 
docker 不会销毁 bind mount ,删除数据的工作只能由host负责。对于docker managed volume,在执行docker rm 删除容器时可以带上 -v 参数,docker 会将容器使用的volume一起删除,但前提是没有其他容器mount 该volume,目的是保护数据。
 
如果删除容器时没有带 -v 选项,这样就会产生孤儿 volume,我们可以使用docker volume 进行维护
 
root@docker-lab:~# docker volume --help
 
Usage:    docker volume COMMAND
 
Manage volumes
 
Options:
 
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes
 
Run 'docker volume COMMAND --help' for more information on a command.
root@docker-lab:~# docker volume ls
DRIVER              VOLUME NAME
local               0cbcb3731b6f8a2b9f957335d6e0792b00505cf2a5e2f86eea61cbcb2cb9e42d
local               1fd8e6ffd63362078a7ef3cf2e228c93eecbd72692cc5de3486b2b017759b88e
local               2abf327627f510cdb096768098aeeed5e71863c62ba4b82a258c8893fe70f3c9
local               3017874bfb6d78e034d699e82d3e8278b64e290ac70912d35c7256abbfa9e72f
local               353249c2f105095ef9ef3f2ee2a97f353f0e4f1354ee625657f5dd513df35088
local               3ffdd1201385f36eb3b05026fedcf71243211965979ba4a9f8be9b80fc9273de
local               643f80e53b0c53571f715ae7535f30d8b142b2321e7fd22fd29bf25fcf006059
local               69587f2f0d69dcbefbcdb44ec97f126b4e2f3a7326f4eab18da60639fbc15bd8
local               6d2b7b1116bc9b25326a1d00d0cafcabaf46577face06e7f52da409ce179ea68
local               812e94bd8072a74cb3b88f419f3a3d07ec9a7c68335dd2d1d54438de066dcacb
local               8275135d734d88e057d6998405357732ec64e0effd91bbe76f74a16ac856047d
local               8967124070bf1f6762dd24b0e16d2d82eedf03699a4cc47c577bf66a4abe3bee
local               9bda742b2b0149dc21a650a4a0eae5d635d28dbe7e6d861e4ea4b19f37347980
local               cfeab0409cb87cc0306300b0b1ebb3cc6ec88d43cd077ff808102decbf6343da
local               dd24468787a957f848f3d5175be447d7487188eccea27822a17bdf83bad8caef
local               e942301ca877940d789f8be5ae4be211251d526e59ef789e273b161d573ec233
local               f7a9fff2e85b66b33634c5f37bc8c65a6b9bdbf92613b2290157ba369e2700d2
local               fb5ae539d81345d827aa241ff24d3cafb7aa9ac3b2c9139fcabfaf6513b983d3
root@docker-lab:~# docker volume rm fb5ae539d81345d827aa241ff24d3cafb7aa9ac3b2c9139fcabfaf6513b983d3
fb5ae539d81345d827aa241ff24d3cafb7aa9ac3b2c9139fcabfaf6513b983d3
root@docker-lab:~# docker volume ls
DRIVER              VOLUME NAME
local               0cbcb3731b6f8a2b9f957335d6e0792b00505cf2a5e2f86eea61cbcb2cb9e42d
local               1fd8e6ffd63362078a7ef3cf2e228c93eecbd72692cc5de3486b2b017759b88e
local               2abf327627f510cdb096768098aeeed5e71863c62ba4b82a258c8893fe70f3c9
local               3017874bfb6d78e034d699e82d3e8278b64e290ac70912d35c7256abbfa9e72f
local               353249c2f105095ef9ef3f2ee2a97f353f0e4f1354ee625657f5dd513df35088
local               3ffdd1201385f36eb3b05026fedcf71243211965979ba4a9f8be9b80fc9273de
local               643f80e53b0c53571f715ae7535f30d8b142b2321e7fd22fd29bf25fcf006059
local               69587f2f0d69dcbefbcdb44ec97f126b4e2f3a7326f4eab18da60639fbc15bd8
local               6d2b7b1116bc9b25326a1d00d0cafcabaf46577face06e7f52da409ce179ea68
local               812e94bd8072a74cb3b88f419f3a3d07ec9a7c68335dd2d1d54438de066dcacb
local               8275135d734d88e057d6998405357732ec64e0effd91bbe76f74a16ac856047d
local               8967124070bf1f6762dd24b0e16d2d82eedf03699a4cc47c577bf66a4abe3bee
local               9bda742b2b0149dc21a650a4a0eae5d635d28dbe7e6d861e4ea4b19f37347980
local               cfeab0409cb87cc0306300b0b1ebb3cc6ec88d43cd077ff808102decbf6343da
local               dd24468787a957f848f3d5175be447d7487188eccea27822a17bdf83bad8caef
local               e942301ca877940d789f8be5ae4be211251d526e59ef789e273b161d573ec233
local               f7a9fff2e85b66b33634c5f37bc8c65a6b9bdbf92613b2290157ba369e2700d2
root@docker-lab:~# docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
643f80e53b0c53571f715ae7535f30d8b142b2321e7fd22fd29bf25fcf006059
3017874bfb6d78e034d699e82d3e8278b64e290ac70912d35c7256abbfa9e72f
0cbcb3731b6f8a2b9f957335d6e0792b00505cf2a5e2f86eea61cbcb2cb9e42d
353249c2f105095ef9ef3f2ee2a97f353f0e4f1354ee625657f5dd513df35088
9bda742b2b0149dc21a650a4a0eae5d635d28dbe7e6d861e4ea4b19f37347980
1fd8e6ffd63362078a7ef3cf2e228c93eecbd72692cc5de3486b2b017759b88e
dd24468787a957f848f3d5175be447d7487188eccea27822a17bdf83bad8caef
812e94bd8072a74cb3b88f419f3a3d07ec9a7c68335dd2d1d54438de066dcacb
69587f2f0d69dcbefbcdb44ec97f126b4e2f3a7326f4eab18da60639fbc15bd8
cfeab0409cb87cc0306300b0b1ebb3cc6ec88d43cd077ff808102decbf6343da
8967124070bf1f6762dd24b0e16d2d82eedf03699a4cc47c577bf66a4abe3bee
6d2b7b1116bc9b25326a1d00d0cafcabaf46577face06e7f52da409ce179ea68
f7a9fff2e85b66b33634c5f37bc8c65a6b9bdbf92613b2290157ba369e2700d2
8275135d734d88e057d6998405357732ec64e0effd91bbe76f74a16ac856047d
2abf327627f510cdb096768098aeeed5e71863c62ba4b82a258c8893fe70f3c9
e942301ca877940d789f8be5ae4be211251d526e59ef789e273b161d573ec233
Total reclaimed space: 1.543GB
root@docker-lab:~# docker volume ls
DRIVER              VOLUME NAME
local               3ffdd1201385f36eb3b05026fedcf71243211965979ba4a9f8be9b80fc9273de
root@docker-lab:~# docker inspect vc_data
        "Mounts": [
            {
                "Type": "volume",
                "Name": "3ffdd1201385f36eb3b05026fedcf71243211965979ba4a9f8be9b80fc9273de",
                "Source": "/var/lib/docker/volumes/3ffdd1201385f36eb3b05026fedcf71243211965979ba4a9f8be9b80fc9273de/_data",
                "Destination": "/usr/local/apache2/htdocs",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
root@docker-lab:~# docker rm -v vc_data
vc_data
root@docker-lab:~# docker volume ls
DRIVER              VOLUME NAME
root@docker-lab:~#
 
单机 volume 总结:
 
1、docker为容器提供了两种存储资源:数据层 和 data volume
2、数据层包括镜像层和容器层,由storage driver管理
3、data volume有两种类型:bind mount 和docker managed volume
4、bind mount可以实现容器与host之间,容器与容器之间共享数据
5、volume container 是一种有更好移植性的容器间数据共享方案,特别是data-packed volume container
6、最后我们学习了如何备份、恢复、迁移和销毁data volume
 
 

044、vloume声明周期管理(2019-03-07 周四)的更多相关文章

  1. Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理

    我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...

  2. 第 6 章 存储 - 044 - volume 生命周期管理

    volume 生命周期管理 1)备份 因为 volume 实际上是 host 文件系统中的目录和文件,所以 volume 的备份实际上是对文件系统的备份 例如:本地的Registry,所有镜像都存在/ ...

  3. rxjava封装,RxBus封装(上线项目集成,声明周期管理,处理溢出内存,支持同时多个请求。)

    Github地址 RxLibrary工程:1.rxjava2 + retrofit2的封装,常用的请求(Get,Post,文件上传,文件下载),防止内存泄漏,简单便捷,支持自定义loading等属性. ...

  4. Unity容器声明周期管理

    Having said that, here is a solution that you can use with the Unity container: Create some custom a ...

  5. [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. 004-docker命令-容器生命周期管理、容器操作

    1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...

  7. Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  8. React学习笔记(五)State&声明周期

    React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...

  9. Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态

    ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...

随机推荐

  1. emwin之2D图形流位图显示的方法

    @2018-10-31 [需求] 界面上绘制状态指示图标 [方法] --① 方法一 外部存储介质上的图标读写与显示 i  . 将要显示的图标使用官方软件<BmpCvt.exe>转换成 &q ...

  2. 【dfs】p1451 求细胞数量

    题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式## ...

  3. 【Linux】linux正则表达式及通配符

    正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.拥有强大的字符搜索功能.也非常方便的搜索过滤出我们想要的内容. linux正则表达式分为基本正则表达式(Basic Regexp)和扩展 ...

  4. can物理信号-----------显性和隐性

    can信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L.静态时均是2.5v左右,此时状态表示为逻辑“1”,也可以叫做隐性.用CAN_H比CAN_L高表示逻辑“0”,称为显性,此时通常电压值 ...

  5. angular2路由与express路由冲突的问题

    angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...

  6. ACM-ICPC 2017 Asia Xi'an A XOR (线性基+线段树思想)

    题目链接 题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后用线段树维护线性 ...

  7. Android 架构 -- Room

    gradle依赖: // add for room implementation "android.arch.persistence.room:runtime:1.1.1" // ...

  8. mybatis 二级缓存

    Mybatis读取缓存次序: 先从二级缓存中获取数据,如果有直接获取,如果没有进行下一步: 从一级缓存中取数据,有直接获取,如果没有进行下一步: 到数据库中进行查询,并保存到一级缓存中: 当sqlSe ...

  9. 洛谷 P1061 Jam的计数法

    传送门 题解: 相关变量解释: int s,t,w; ;//最多输出五组 int maxNum[maxn];//maxNum[i] : i 位置可以达到的最大值 char letter[maxn]; ...

  10. 象棋start

    这篇文章其实谈的不是象棋开局,更谈不上开局技巧,举个例子:第一步走炮二平五,也即是中炮局,但中炮局可以根据对手的应对着法演变成很多,比如:五七炮对屏风马,五六炮对屏风马,顺炮局,以及雷公炮等等,这些才 ...