zoukankan      html  css  js  c++  java
  • 38-docker managed volume

    docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了。还是以 httpd 容器为例:

    我们通过 -v 告诉 docker 需要一个 data volume,并将其 mount 到 /usr/local/apache2/htdocs。那么这个 data volume 具体在哪儿呢?

    这个答案可以在容器的配置信息中找到,执行 docker inspect 命令:

    docker inspect 的输出很多,我们感兴趣的是 Mounts 这部分,这里会显示容器当前使用的所有 data volume,包括 bind mount 和 docker managed volume。

    Source 就是该 volume 在 host 上的目录。

    原来,每当容器申请 mount docker manged volume 时,docker 都会在/var/lib/docker/volumes 下生成一个目录(例子中是 "/var/lib/docker/volumes/499cbbf27a424fe37949b15c97e3c557c414d3e40c13e99cd75e6f0a48f87e26/_data),这个目录就是 mount 源。

    下面继续研究这个 volume,看看里面有些什么东西

    volume 的内容跟容器原有 /usr/local/apache2/htdocs 完全一样,这是怎么回事呢?

    这是因为:如果 mount point 指向的是已有目录,原有数据会被复制到 volume 中。

    但要明确一点:此时的 /usr/local/apache2/htdocs 已经不再是由 storage driver 管理的层数据了,它已经是一个 data volume。我们可以像 bind mount 一样对数据进行操作,例如更新数据:

    简单回顾一下 docker managed volume 的创建过程:

    1. 容器启动时,简单的告诉 docker "我需要一个 volume 存放数据,帮我 mount 到目录 /abc"。

    2. docker 在 /var/lib/docker/volumes 中生成一个随机目录作为 mount 源。

    3. 如果 /abc 已经存在,则将数据复制到 mount 源,

    4. 将 volume mount 到 /abc

    除了通过 docker inspect 查看 volume,我们也可以用 docker volume 命令:

    目前,docker volume 只能查看 docker managed volume,还看不到 bind mount;同时也无法知道 volume 对应的容器,这些信息还得靠docker inspect

    我们已经学习了两种 data volume 的原理和基本使用方法,下面做个对比:

    1. 相同点:两者都是 host 文件系统中的某个路径。

    2. 不同点:

  • 相关阅读:
    常见的行元素与块元素
    [转]SVN服务器部署并实现双机同步及禁止普通用户删除文件
    [转]Axure共享工程Shared Project(二):编辑修改和提交
    如何添加网络打印机
    [转]JSON 转换异常 死循环 There is a cycle in the hierarchy
    比较常用的Properties配置文件的使用方法示例
    解决Tomcat项目重复加载导致pemgen space内存溢出
    怎样批量删除.svn文件
    [转]前端工程师必须掌握的知识点
    Freemarker 使用
  • 原文地址:https://www.cnblogs.com/mkxfs/p/10927333.html
Copyright © 2011-2022 走看看