Docker镜像升级保留数据(volume)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像升级保留数据(volume)相关的知识,希望对你有一定的参考价值。

参考技术A 修改为 (原容器的配置:1.2 挂载信息拷过来)

修改容器的配置文件需要重启docker服务,如:
config.v2.json
hostconfig.json

Docker - 命令 - volume 相关

  1. 概述
    1. docker volume 命令
  2. 背景
    1. docker 容器的存储, 通常需要独立于镜像
    2. docker volume 就是负责这块的命令

1. 写在 docker volume 之前

  1. 概述
    1. docker run 与 volume 相关的介绍
  2. 背景
    1. 其实在使用 docker [container] run 的时候, 我们已经在使用 volume 了
  3. volume
    1. 概述
      1. 类似
        1. linux 里的 卷
        2. windows 里的 盘
    2. 作用
      1. 对接其他设备
      2. 拓展存储空间
      3. 隔离存储区域
      4. 对数据的迁移, 复用, 也有支持

1. 首先, 这个不是 volume

  1. 概述
    1. docker run -v 中, 本地目录 与 容器路径 对接, 不是 volume
  2. 命令

    > docker run --name some-nginx1 -v $(pwd)/html:/usr/share/nginx/html -d nginx
  3. 结果
    1. 容器成功启动
    2. 容器的 ‘/usr/share/nginx/html‘ 目录, 与 宿主机 的 ‘$(pwd)/html‘ 目录, 成功关联
    3. 但是
      1. 并没有创建 volume
  4. 验证
    1. docker container inspect
      1. HostConfig 下
        1. Volumes 字段, 值为 null
    2. docker volume ls
      1. 无法查到 新的 volume
  5. 特性
    1. 触发
      1. 填写路径时, 需要用以下方式触发
        1. /
        2. ~/
    2. 路径
      1. host 上如果不存在, 主动创建
      2. container 上如果不存在, 主动创建
    3. 覆盖
      1. 如果冲突, 则以 host 为准

2. 然后, 我们开始使用 volume

  1. 概述
    1. 在 docker run 中使用 volume
  2. 位置
    1. 路径

      # 默认位置
      /var/lib/docker/volumes
      # 具体位置, 可以通过 docker container inspect 查看
  3. 命令

    > docker run --name some-nginx2 -v html:/usr/share/nginx/html -d nginx
  4. 结果
    1. 容器启动成功
    2. 在 volume 的默认路径下, 创建了一个 volume
      1. 名为 html
    3. html 与 容器的路径 绑定成功
  5. 验证
    1. docker volume ls
      1. 可以查看到新的 volume
  6. 其他
    1. volume 名称
      1. 如果不指定, 会随机生成

        > docker run --name some-nginx2 -v /usr/share/nginx/html -d nginx
    2. volume 权限
      1. 权限
        1. 只读
        2. 读写
      2. 指定

        # 默认为 rw
        -v html:/usr/share/nginx/html[:ro|:rw]

3. volumes-from

  1. 概述
    1. 创建新容器时, 使用和另一个容器相同的挂载策略
  2. 场景
    1. 容器 d1
      1. 有自己的卷
    2. 容器 d2
      1. 继承 d1 的卷
  3. 命令
    1. d1
    2. d2

      > docker container run --name d2 --volumes-from d1 -d nginx
  4. 埋个坑
    1. 参考里创建 d1 的时候, 没有带 -v
      1. 创建 d2 也没问题
      2. docker container inspect 查看时, 也能正确查看到
      3. 但是这个继承, 到底有没有意义
        1. 还是说, 容器起来的时候, 临时读写层, 也被视为了 volume?
    2. volume 的生命周期
      1. 例子里说了这么个情况
        1. d1 创建, 有了 volume v1
        2. d2 volumes-from 了 d1, 使用了 同样的 v1
        3. d1 关闭了, volume 不受影响
        4. d2 关闭, 没有容器使用 v1,
        5. 然后 v1 的生命周期结束了
      2. 疑问
        1. 什么是 volume 的生命周期
        2. 我试过所有容器都结束, 甚至删掉的情况
          1. -v 创建的卷, 依然存在
          2. 那结束, 又是怎么个回事

2. docker volume

1. 概述

  1. docker volume 命令
    1. 有了上面的认识, 后续的理解, 会方便很多

2. 命令们

  1. ls
    1. 概述
      1. 查看卷列表
    2. 命令

      # 返回 driver 信息 和 volume 的名称
      > docker volume ls
  2. inspect
    1. 概述
      1. 查看卷详情
    2. 命令

      # 稍微详细的信息, 不细说了
      > docker volume inspect <volumeName>
  3. create
    1. 概述
      1. 创建卷
    2. 命令

      # 在默认位置, 创建一个名为 volumeName 的卷
      # 卷 不能重名
      # 创建完之后, 可以用 volumeName 在 创建容器时挂载
      > docker volume crreate <volumeName>
  4. rm
    1. 概述
      1. 删除卷
    2. 命令

      # 删除卷
      > docker volume rm <volumeName> 
  5. prune
    1. 概述
      1. 删除 闲置卷
    2. 命令

      # 删除没有挂载的卷
      > docker volume prune

ps

  1. ref
    1. docker 容器与容器云
      1. 问题
        1. 这本书没把 bind 和 volume 区分得很开
    2. Docker学习笔记(6)——Docker Volume
      1. advantage
        1. 区分了 bind mount 和 volume
      2. disadvantage
        1. 没有 ref 作为支持
    3. docker 入门 —— docker容器数据卷volumes-from
  2. 问题1: 是否有 mount 之类的命令
    1. 条件
      1. 运行之中
  3. 问题2: 上面提到的一些问题
    1. 概述
      1. 需要验证

以上是关于Docker镜像升级保留数据(volume)的主要内容,如果未能解决你的问题,请参考以下文章

docker volume

docker volume

使用Docker存储之卷Volume

docker学习笔记18:Dockerfile 指令 VOLUME 介绍

Docker容器的数据卷(volumes)

Docker之数据卷Volume