• Docker


    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. 需要验证
    4. 问题3: 卷能独立于文件系统

      1. 概述

        1. 在书上看到有书这么说, 但是我想不明白
        2. 我所创建的卷, 都是在本地, 文件系统, 是由 /var 那个盘决定的
        3. 如果要触发, 需要什么条件
          1. 将 /var 挂载为其他目录
          2. 指定 卷存放的位置, 到其他的文件系统
      2. 感觉是个坑, 以后得填上

    尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出
  • 相关阅读:
    django 从零开始 9 自定义密码验证加密
    OJ建站之Virtual Judge系统搭建
    OJ建站之HUSTOJ搭建
    Android Studio:Gradle DSL method not found: 'runProguard()'
    品牌笔记本预装windows的OEM分区解决方案(联想)
    Win8/8.1 下映像管理和恢复环境的配置
    POJ 2728 Desert King 最优比率生成树
    POJ 2976 Dropping tests 01分数规划 模板
    HDU 4081 Qin Shi Huang's National Road System 次小生成树变种
    HDU 4408 Minimum Spanning Tree 最小生成树计数
  • 原文地址:https://www.cnblogs.com/xy14/p/11888541.html
Copyright © 2020-2023  润新知