文档章节

volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)

CloudMAN
 CloudMAN
发布于 2017/07/21 06:49
字数 774
阅读 289
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

Data Volume 中存放的是重要的应用数据,如何管理 volume 对应用至关重要。前面我们主要关注的是 volume 的创建、共享和使用,本节将讨论如何备份、恢复、迁移和销毁 volume。

备份

因为 volume 实际上是 host 文件系统中的目录和文件,所以 volume 的备份实际上是对文件系统的备份。

还记得前面我们是如何搭建本地 Registry 的吗?

95.png

所有的本地镜像都存在 host 的 /myregistry 目录中,我们要做的就是定期备份这个目录。

恢复

volume 的恢复也很简单,如果数据损坏了,直接用之前备份的数据拷贝到 /myregistry 就可以了。

迁移

如果我们想使用更新版本的 Registry,这就涉及到数据迁移,方法是:

  1. docker stop 当前 Registry 容器。

  2. 启动新版本容器并 mount 原有 volume。

     

    docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest

当然,在启用新容器前要确保新版本的默认数据路径是否发生变化。

销毁

可以删除不再需要的 volume,但一定要确保知道自己正在做什么,volume 删除后数据是找不回来的。

docker 不会销毁 bind mount,删除数据的工作只能由 host 负责。对于 docker managed volume,在执行 docker rm 删除容器时可以带上 -v 参数,docker 会将容器使用到的 volume 一并删除,但前提是没有其他容器 mount 该 volume,目的是保护数据,非常合理。

如果删除容器时没有带 -v 呢?这样就会产生孤儿 volume,好在 docker 提供了 volume 子命令可以对 docker managed volume 进行维护。请看下面的例子:

容器 bbox 使用的 docker managed volume 可以通过 docker volume ls 查看到。

删除 bbox:

因为没有使用 -v,volume 遗留了下来。对于这样的孤儿 volume,可以用 docker volume rm 删除:

如果想批量删除孤儿 volume,可以执行:

 

docker volume rm $(docker volume ls -q)

小结

本章我们学习了以下内容:

  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。

不知大家发现没有,这章我们学习的只是单个 docker host 中的存储方案。而跨主机存储也是一个重要的主题,当然也更复杂,我们会在容器进阶技术章节详细讨论。

下一节我们便开始进阶知识部分的学习,首先讨论如何高效管理多个 Docker 主机。
 

二维码+指纹.png

© 著作权归作者所有

CloudMAN
粉丝 541
博文 360
码字总数 221704
作品 0
海淀
私信 提问
加载中

评论(0)

日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要。 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。考虑到容器短暂和不固...

CloudMAN
2017/10/30
517
1
日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要。 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。考虑到容器短暂和不固...

CloudMan6
2017/10/30
0
0
17、《每天5分钟玩转Docker容器技术》学习--Multi-host网络

------------------------------------重要说明------------------------------------ 本文内容都是参考Cloudman系列进行学习,是个人学习过程记录,与原版不同! 原版请参考cloudman《每天5...

hostman6
2018/04/12
0
0
预告 — 容器平台技术

容器我们已经学了大半年,先回顾一下容器生态系统: 容器生态系统包含三个部分: 容器核心知识,包括架构、镜像、容器、网络和存储。 容器平台技术,包括容器编排引擎、容器管理平台和基于容...

CloudMan6
2017/11/15
0
0
Docker 如何支持多种日志方案?- 每天5分钟玩转 Docker 容器技术(88)

将容器日志发送到 STDOUT 和 STDERR 是 Docker 的默认日志行为。实际上,Docker 提供了多种日志机制帮助用户从运行的容器中提取日志信息。这些机制被称作 logging driver。 Docker 的默认 lo...

CloudMan6
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可以让你用到老的IntelliJ idea 破解法子

看下效果图如下: 安装的时候选择试用,然后进入idea 下载插件 插件地址 然后将jetbrains-agent.jar文件拖入到idea中 然后重启 然后选择Activation code 然后就ojbk了...

布袋和尚_爱吃鱼
19分钟前
15
0
获取类对象的四种方式

/* * 获取类对象的三种方式 * */ public static void main(String[] args) throws Exception { //1、Class.forName 【建议】 Class<?> clazz1 = Class.forName("com.czxy.demo2.Person"); //......

费先森
34分钟前
21
0
2020中台建设-技术中台的搭建和运营

2020中台建设-技术中台的搭建和运营

Original123
42分钟前
22
0
CTO:不要在 Java 代码中写 set/get 方法了,逮一次罚款

前言 what?你的 Java 代码中还充斥着大量的 set/get 方法? 我们在刚开始学习 Java 语言的时候讲过,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量...

码农突围
51分钟前
21
0
为什么不推荐去做安全测试工程师?

对,你没看错。我不推荐大家去做安全测试工程师。 为什么不推荐大家去做安全测试? 今天,很多软件并没有经过专门的安全测试便运行在互联网上,它们携带着各类安全漏洞直接暴露在公众面前,其...

爱码小哥
今天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部