Docker学习笔记(五)Docker的数据管理

Docker容器管理数据主要有数据卷和数据容器两种方式

1 数据卷

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,具有以下特点:

(1)数据卷可以在容器之间共享和重用

(2)对数据卷的修改实时生效

(3)对数据卷的更新,不会影响到image

(4)卷会一直存在,直到没有容器使用(挂载)

1.1 在容器内创建数据卷

通过run命令从image创建并运行一个container实例的时候,可以用-v参数在container内创建一个数据卷,多次使用-v就可以创建多个数据卷,如下图:用ubuntu:15.04这个image创建一个运行在后台的container,名字指定为volume_container,-v指定创建一个数据卷并挂载到container的/opt/目录-P参数是允许外部访问容器需要暴露的端口(后面网络章节笔记中重点研究这个东西)


下面我们继续研究这个数据卷,用"docker inspect ID"查看container的信息,找到其如下标注的数据卷的详细信息,我们可以看出,这个数据卷其实就是host的/var/lib/docker/volumes下的一个特殊目录,后面一长串ID就是我们创建的数据卷的ID了,现在它挂载到了container的/opt路径:


现在,我们进入host下这个数据卷的路径,并在下面创建一个test.cpp的文件,然后进入container,查看/opt下的文件,如期看到了我们在卷中创建的文件,至此,我们应该对数据卷有一个更直观的概念了


1.2 挂载一个主机目录作为数据卷

在上面,我们通过-v参数新建了一个数据卷挂载到container指定的路径下,那么我们是否可以直接将host已有的目录挂载到container上呢,答案肯定是可以的,实验结果如下图:将host的/home/目录作为数据卷挂载到container的/opt目录下。



docker挂载数据卷的默认权限是RW,我们也可以通过ro指定为只读:

"docker run -d -P --name con -v /home:/opt:ro ubuntu:15.04 /bin/bash"

注意,这里我们挂载的host路径必须是绝对路径,如果目录不存在,docker会自动创建目录并挂载。

2 数据卷容器

如果我们需要在容器之间共享一些持续更新的数据吗,最简单的方式就是使用数据卷容器,数据卷容器其实就是一个普通的容器,我们专门用它来提供数据卷供其它container来挂载:

(1)创建一个数据卷容器vol_cont,并在vol_cont中创建一个数据卷挂载到 container的/home目录,并在container的/home下创建一个文件hello.cpp:


(2)创建两个用户的container,并挂载数据卷容器vol_cont中的数据卷,在两个user_cont中的/home路径下都可以看到我们在数据卷容器中创建的hello.cpp,而且从vol_cont挂载数据卷到user_cont1和user_cont2,三个容器的数据卷挂载路径一致,都是/home路径。此时,三个容器任何一方在该路径下写入数据,其它容器都可以看到。


如果删除了挂载的container,数据卷并不会自动删除。因为数据卷归根到底是创建在/var/lib/docker/volumes下的一个特殊目录,使用它的container只是对它进行了挂载,可以使用它来写入和共享数据,并不是绝对的所属关系。如果要删除一个数据卷,必须在删除最后一个挂载它的container时用"dcoekr rm -v"来指定同时删除关联的数据卷

使用数据卷容器,我们可以方便的在容器之间自由升级和移动数据卷。


猜你喜欢

转载自blog.csdn.net/u012299594/article/details/53090442