Docker两种存放数据的资源:
- 由 storage driver 管理的镜像层和容器层。
- Data Volume。
一、storage driver
- 实现了多层数据的堆叠并为用户提供一个单一的合并之后的统一视图
- Docker 支持多种 storage driver,有 AUFS、Device Mapper、Btrfs、OverlayFS、VFS 和 ZFS。
- 分层结构最大的特性是 Copy-on-Write
- 一般用来保存无状态的docker容器,如busybox
二、Data Volume
- 质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中
volume特点:
- Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。
- 容器可以读写 volume 中的数据。
- volume 数据可以被永久的保存,即使使用它的容器已经销毁。
两种类型的 volume:
1.bind mount
注:bind mount 是将 host 上已存在的目录或文件 mount 到容器。
挂载volime格式:
-v 的格式为 <host path>:<container path>:权限 例: docker run -d -p 80:80 -v ~/htdocs:/usr/local/apache2/htdocs:ro httpd
2.docker managed volume
不需要指定 mount 源,指明 mount point 就行了 例: docker run -d -p 80:80 -v /usr/local/apache2/htdocs httpd 注:通过 -v 告诉 docker 需要一个 data volume,并将其 mount 到 /usr/local/apache2/htdocs。 执行 docker inspect 命令可查看映射目录 docker 都会在/var/lib/docker/volumes 下生成一个目录(例子中是 "/var/lib/docker/volumes/f4a0a10080/_data ),这个目录就是 mount 源。
两种 data volume 的原理和基本使用方法对比:
- 相同点:两者都是 host 文件系统中的某个路径。
- 不同点:
bind mount
|
docker managed volume
|
|
volume 位置
|
可任意指定
|
/var/lib/docker/volumes/...
|
对已有mount point 影响
|
隐藏并替换为 volume
|
原有数据复制到 volume
|
是否支持单个文件
|
支持
|
不支持,只能是目录
|
权限控制
|
可设置为只读,默认为读写权限
|
无控制,均为读写权限
|
移植性
|
移植性弱,与 host path 绑定
|
移植性强,无需指定 host 目录
|
发表评论