Docker 数据管理

Docker 数据管理

  1. 容器管理数据的方式

ocker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:

  • 数据卷(Volumes)
  • 挂载主机目录 (Bind mounts)

?

  1. 数据卷

    1. 是什么发?

      1. 一个可供一个或多个容器使用的特殊目录,它绕过 UFS
      2. 数据卷 可以在容器之间共享和重用
      3. 数据卷 的修改会立马生效
      4. 数据卷 的更新,不会影响镜像
      5. 数据卷 默认会一直存在,即使容器被删除
      6. 类似于Linux对目录文件进行mount,镜像中指定为挂载点的目录会被隐藏掉,能看到是挂载的数据卷。
  2. 创建一个数据卷

    [ ~]# docker volume create my-container_vol

    查看所有的 数据卷

    [ ~]# docker volume ls

    在主机里使用以下命令可以查看指定 数据卷 的信息

    [ ~]# docker volume inspect my-container_vol

  3. 启动一个挂载数据卷的容器

    1. 在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷
    2. 创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /webapp 目录
      1. docker run -d -P --name web --mount source="my-contariner_vol",target=/webapp training/webapp python app.py
  4. 查看数据卷的具体信息

    在主机里使用以下命令可以查看 web 容器的信息

    $ docker inspect web
  5. 删除数据卷

    $ docker volume rm my-vol
  6. 数据卷的作用

    1. 有点类似我们Redis里面的rdb和aof文件
      ? 能干嘛
      ? 容器的持久化,不会自动删除,没有垃圾回收处理,、

      1. ? docker rm -v 删除容器时一起删除数据卷

      2. 无主的数据卷可能会占据很多空间,要清理请使用以下命令

        $ docker volume prune
      3. 容器间继承+共享数据
        ? 数据卷
        ? 容器内添加
        ? 直接命令添加
        ? 命令
        ? docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
        ? 查看数据卷是否挂载成功
        ? 容器和宿主机之间数据共享
        ? 容器停止退出后,主机修改后数据是否同步
        ? 命令(带权限)
        ? docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
        ? DockerFile添加
        ? 根目录下新建mydocker文件夹并进入
        ? 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
        ? File构建
        ? build后生成镜像
        ? 获得一个新镜像zzyy/centos
        ? run容器
        ? 通过上述步骤,容器内的卷目录地址已经知道
        对应的主机目录地址哪??
        ? 主机对应默认地址
        ? 备注
        ? 数据卷容器
        ? 是什么
        ? 总体介绍
        ? 以上一步新建的镜像zzyy/centos为模板并运行容器dc01/dc02/dc03
        ? 它们已经具有容器卷
        ? /dataVolumeContainer1
        ? /dataVolumeContainer2
        ? 容器间传递共享(--volumes-from)
        ? 先启动一个父容器dc01
        ? 在dataVolumeContainer2新增内容
        ? dc02/dc03继承自dc01
        ? --volumes-from
        ? 命令
        ? dc02/dc03分别在dataVolumeContainer2各自新增内容
        ? 回到dc01可以看到02/03各自添加的都能共享了
        ? 删除dc01,dc02修改后dc03可否访问
        ? 删除dc02后dc03可否访问
        ? 再进一步
        ? 新建dc04继承dc03后再删除dc03
        ? 结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

相关推荐