Docker笔记之数据卷

2018-12-19  本文已影响13人  董小贱

为什么使用数据卷,那先来了解一下Docker的联合文件系统。

0.数据卷基础

0.1 Docker联合文件系统

Docker镜像是有多层只读文件叠加而成,当运行起一个容器的时候,Docker会在制只读层上创建一个读写层。如果运行中的容器需要修改文件,那么并不会修改只读层的文件,只会把该文件复制到读写层然后进行修改,只读层的文件就被隐藏了。当删除了该容器之后,或者重启容器之后,之前对文件的更改会丢失,镜像的只读层以及容器运行是的“读写层”被称为联合文件系统(Union File System)
为了实现容器与主机之间、容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份迁移恢复等,Docker加入了数据卷(volumes)机制。简单的讲,就是做了一个文件夹的实时共享,有点像局域网的文件共享。

0.2 数据卷的特点
  1. 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  2. 数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了荣期间的数据共享和交换。
  3. 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
  4. 容器对数据卷的修改是实时进行的。
  5. 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。

1.Docker挂载容器数据卷 查看更多

bind mountsVolumes、和tepfs mounts三种方式,还有就是共享其他容器的数据卷,其中tmpfs是一种基于内存的临时文件系统。tepfs mounts数据不会存储在磁盘上,在次笔记中暂不做笔记。

1.1 bind mounts

bind mounts示意图
使用bind mounts挂载数据卷时,宿主机上的文件或者目录将载入到容器中。文件或目录由其在主机上的绝对路径或相对路径引用。如果将数据卷绑定到容器上的非空目录中,则绑定装置会隐藏目录的现有内容。

bind mounts方式挂载数据卷的两种方式:

利用docker run/create的参数为容器挂载数据卷:

方式一:-v --volume

-v宿主机文件或者文件夹路径:容器中文件或文件夹的路径:可选字段
其中 宿主机文件或者文件夹路径和容器中文件或文件夹的路径是必须的,可选字段,用分号分隔选项,非必须,如 ro,consistent,delegated,cached,z,和Z

-v
方式二: --mount

其参数由多个键值对组成,以逗号分隔。

--mount
-v和--mount之间的区别

使用-v绑定宿主机上不存在的文件或者目录时,会自动生成相应的文件或者目录,--mount则会抛出异常,所以用--mount指定文件和路径时需要提前创建以保证其存在。

1.2 volumes的方式挂载数据卷

Docker挂载数据卷
Volumes是保存Docker容器生成和使用数据的首选机制。

利用docker run/create的参数为容器挂载数据卷:

方式一:-v --volume

-vvolume_name:容器中文件或文件夹的路径:可选字段。
其中 volume_name是数据卷的名称,在宿主机上是唯一的,可以省略该字段,会自动创建。

docker run -v
docker inspect
方式二: --mount

其参数由多个键值对组成,以逗号分隔。

用volumes方式挂载的数据卷,实际上是创建了数据卷对象,可以用以下命令进行管理:
    docker volume create     创建数据卷对象
    docker volume inspect    查看数据卷的详细信息
    docker volume ls         查看已创建的数据卷对象
    docker volume prune      删除所有未被使用的数据卷对象
    docker volume rm         删除一个或多个数据卷对象

1.3 使用其他容器的数据卷

使用dockers run/create--volumes-from参数指定数据卷容器docker run/create --volume-form CONTAINER

2. 注意

Docker的数据卷更多会是使用volumes方式来进行使用,但值得注意的是:

---------------------------------------万恶的分隔线------------------------------------------

参考资料:Docker 文档

总注:通过volumes方式挂载数据卷还有很多要注意的,一些比较厉害的功能在这里没有涉及,需要看一下官方文档介绍的比较详细。因为是初学,如有问题,欢迎指正!
上一篇 下一篇

猜你喜欢

热点阅读