一开始,认为Volume是用来持久化的,但是这实际上不对,因为认为Volume是用来持久化的同学一定是认为容器无法持久化,所以有了Volume来帮助容器持久化,事实上,容器会一直存在,除非你删除他们.

容器是持久的,直到你删除他们,并且你只能这么做:

  1. $docker rm my_contariner

如果你没有执行此命令,那么你的容器会一直存在,依旧可以启动,停止等.如果你找不到容器,可以运行

  1. $docker ps -a

Docker ps只能显示正在运行的容器,但是容器也会处于停止状态,这种情况下,上面的命令会显示所有的容器,无论他们处于什么状态.docker run...命令可以有很多的组合(它提供了Docker容器从创建到启动的所有功能),它会创建一个新的容器,然后启动它.

所以说,Volume不是为了持久化.

什么是Voume

Volume可以将容器以及容器缠身的数据分离开来,这样的话,当你使用docker rm my_container删除容器时,不会影响相关的数据.

Volume可以使用下面两种方式创建:

1.在Dockerfile指定VOLUME /some/dir

2.执行docker run -v /some/dir命令指定

无论哪种方式都是做了同样的事情.他们告诉Docker在主机上创建一个目录(默认情况下是在/var/lib/docker),然后将其挂载到指定的路径(本例中是:/some/dir).当删除使用该Volume的容器时,Volume本身不会受到影响,它可以一直存在下去.

如果在容器中不存在指定的目录,那么该目录将会被自动创建.

你可以告诉Docker同时删除容器和Volume:

  1. $docker rm -v my_container

有时候,你想在容器中使用主机上的某个目录,你可以通过其他的参数来指定:

  1. $docker run -v /host/path:/some/path...

这就明确的告诉Docker使用指定的主机路径来代替Docker床架你的根路径并挂载到容器内指定的路径(上例中是/some/dir).需要注意的是,这种方式同样支持问文件.在Docker术语中,这通常被称为bind-mounts.如果主机上的路径不存在,目录将自动在给定的路径中创建.

容器也可以与其他容器共享Volume:

  1. $docker run --name my_container -v /some/path ...
  2. $docker run --volumes-from my_container --name my_contaner2 ...
 上面你的案例将告诉Docker从第一个容器挂载相同的Volume到第二个容器,它可以在两个容器之间共享数据.

如果你执行docker rm -v my_container命令,而上面的第二容器依然存在,那Volume就不会删除,如果你不使用docker rm -v my_container2删除第二个容器,那么这个Volume就是一直存在.

继续补充,因为VOLUME实际上就是在本地新建了一个文件夹挂载了,那么实际上容器内部的文件夹有三种情况:
1、没有指定VOLUME也没有指定-v,这种是普通文件夹。
2、指定了VOLUME没有指定-v,这种文件夹可以在不同容器之间共享,但是无法在本地修改。
3、指定了-v的文件夹,这种文件夹可以在不同容器之间共享,且可以在本地修改。

深入理解Docker Volume(二)的更多相关文章

  1. 用一个实际例子理解Docker volume工作原理

    要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读 ...

  2. 深入理解Docker Volume(一)

    想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载镜像层并在其上添 ...

  3. 理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  4. docker挂载volume的用户权限问题,理解docker容器的uid

    docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...

  5. 理解Docker(8):Docker 存储之卷(Volume)

    (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 ...

  6. docker入门(二)容器与镜像的理解

    10张图带你深入理解Docker容器和镜像 申明:此篇文章是转载的(原文地址http://dockone.io/article/783),今天意外发现已经有人转载了(复制了),希望大家关注原创 原本打 ...

  7. Docker学习笔记之docker volume 容器卷的那些事(二)

    预览目录 更改目录拥有者 Data Container 切换用户 参考文章 0x00 概述 如果你读了docker volume 容器卷的那些事(一),我想应该不会遇到下面这些问题的,毕竟是具有指导意 ...

  8. 理解Docker单机容器网络

    在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...

  9. [转载] 深入理解 docker ulimit

    深入理解docker ulimit 2015年7月23日 10:00 阅读 12778 [编者的话]Docker大规模应用后,如果你没踩过坑,说出去肯定没人信.昨天就遇到一个ulimit的经典问题:业 ...

随机推荐

  1. json树递归js查询json父子节点

    上代码,直接另存为html打开,看console控制台就可以看到效果了 <!DOCTYPE html> <html lang="en"> <head& ...

  2. [Javascript] Prototype, hasOwnProperty(), valueOf() and toString() methods.

    Sometime, use can rewrite the toString , valueOf method to make those function more useful: For exma ...

  3. 分布式文件存储FastDFS(七)FastDFS配置文件具体解释

    配置FastDFS时.改动配置文件是非常重要的一个步骤,理解配置文件里每一项的意义更加重要,所以我參考了大神的帖子,整理了配置文件的解释.原帖例如以下:http://bbs.chinaunix.net ...

  4. java 反射获取属性值 方法

    public static void main(String[] args) throws SecurityException, ClassNotFoundException, IllegalArgu ...

  5. 使用第三方控件DotNetBar来美化程序

    VS的控件确实有点丑陋,需要美化一下.我最先接触的就是DotNetBar,一直用它,一般都还稳定.下面简单地讲解一下使用方法 1. 下载破解版DotNetBar 10版本:http://www.cr1 ...

  6. [2014.5.13][Ubuntu] Ubuntu 14.04STL 出现NTFS分区无法訪问的问题

    5.12 为了给学生改论文,在UPC上登录了Windows 8.1,晚上正常关机.今日切换登陆Ubuntu 14.04分区,发现原来能够正常訪问的windows下的NTFS分区都被锁死.提演示样例如以 ...

  7. 虚拟机Linux下一直获取不到ip怎么办

    虚拟机Linux下一直获取不到ip怎么办 Ifconfig -a 只显示了本地的ip127.0.0.1 和另一个eth1 但是找不到ip地址. 需要做的是: 申请ipdhclient eth1 另外释 ...

  8. java面试第三天

    类和对象: 类:主观抽象,是对象的模板,可以实例化对象----具有相同属性和行为的对象的集合. 习惯上类的定义格式: package xxx; import xxx; public class Xxx ...

  9. 【Oracle】迁移含有BLOG类型的字段的表

    日常数据库迁移过程中,发现dmp文件中的表,如果表含有blog类型的字段,无法进行迁移. 以下是我迁移含有blog类型字段表的经验分享' 使用PLSQL Developer进行导出 接着选择需要导出的 ...

  10. HTTP协议详解之请求篇

    •HTTP请求由3部分组成:请求行.消息报头.请求正文. 1)请求行以一个方法符号开头,以空格分开,后面跟随请求的URI和协议的版本,格式:Method Request-URI HTTP-Versio ...