码迷,mamicode.com
首页 > 其他好文 > 详细

Docker - 命令 - volume 相关

时间:2019-11-19 14:12:00      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:方便   http   返回   volumes   host   自己   镜像   mount   主机   

  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 相关

标签:方便   http   返回   volumes   host   自己   镜像   mount   主机   

原文地址:https://www.cnblogs.com/xy14/p/11888541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!