(七)volume 生命周期管理

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

(1)备份

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

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

root@cuiyongchao:~/dockerfile/test01# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
5fd8edac32bda897d31a831be59a0197084178b331132fd7b9b31209567fa0ce
root@cuiyongchao:~/dockerfile/test01# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
5fd8edac32bd        registry:2          "/entrypoint.sh /etc…"   5 seconds ago       Up 3 seconds        0.0.0.0:5000->5000/tcp   dreamy_leavitt

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

(2)恢复

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

(3)迁移

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

  1. docker stop 当前 Registry 容器。

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

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

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

(4)销毁

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

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

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

root@cuiyongchao:~# docker volume ls
DRIVER              VOLUME NAME
root@cuiyongchao:~# 
root@cuiyongchao:~# 
root@cuiyongchao:~# docker run --name bbox01 -v /test/data busybox
root@cuiyongchao:~# docker volume ls
DRIVER              VOLUME NAME
local               b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1

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

删除 bbox:

root@cuiyongchao:~# docker rm bbox01 
bbox01
root@cuiyongchao:~# docker volume ls
DRIVER              VOLUME NAME
local               b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1

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

root@cuiyongchao:~# docker volume rm b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1
b80242f5bf3e33f56ee0870a39a9f0846c07e172d76c28afc07e638a3fbed5f1
root@cuiyongchao:~# docker volume ls 
DRIVER              VOLUME NAME

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

docker volume rm $(docker volume ls -q)

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/cuiyongchao007/p/14066100.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!