1、存储驱动(Storage Drivers)
Docker有多个存储驱动程序,仅允许其中一个使用底层存储设备。支持的存储驱动以及存储驱动所使用的技术如下:
存储驱动 | 技术 |
overlay or overlay2 | OverlayFS |
aufs | AUFS |
brtfs | Btrfs |
devicemanager | Device Manager |
vfs | VFS |
zfs | ZFS |
1)AUFS
AUFS 是一种 Union File System(联合文件系统),又叫 Another UnionFS、Alternative UnionFS、Advance UnionFS。UnionFS是把不同物理位置的目录合并mount到同一个目录中。
2)Devicemapper
Device Mapper是一个基于kernel的框架,增强了很多Linux上的高级卷管理技术。Docker的devicemapper驱动在镜像和容器管理上,利用该框架的超配和快照功能。devicemapper是指Docker的存储驱动。
3)Btrfs
Btrfs是下一代的copy-on-write文件系统,它支持许多先进的存储技术,使它非常适合Docker。 Btrfs包含在主线Linux内核中。 Docker的btrfs存储驱动程序利用了许多btrfs特性来管理映像和容器。 这些特性包括块级操作、精简配置、写时复制快照和易于管理。可以轻松地将多个物理块设备组合成一个Btrfs文件系统。
4)Ovelay
OverlayFS是一个类似于AUFS 的现代联合文件系统,但更快,实现更简单。Docker为OverlayFS提供了一个存储驱动程序。OverlayFS是内核提供的文件系统,overlay和overlay2是docker提供的存储驱动
5)VFS
VFS存储驱动程序非联合文件系统。每一层都是磁盘上的目录,并且不支持写时复制。如创建一个新层,则需要对上一层进行“深度复制”。与其他存储驱动程序相比,相对较低的性能和更多的磁盘空间使用。但它健壮,稳定的,并可以在每种环境下工作。在测试环境中,还可以用作验证其他存储后端所依据的机制。
6)ZFS
ZFS是下一代文件系统,支持许多高级存储技术,如卷管理、快照、校验和、压缩和重复数据删除、复制等。
它是由Sun Microsystems(现在的Oracle Corporation)创建的,并在CDDL许可下开放源代码。 由于CDDL和GPL之间的许可不兼容,ZFS不能作为主流Linux内核的一部分发布。 但是,ZFS On Linux (ZoL)项目提供了一个超出树的内核模块和用户空间工具,可以单独安装它们。
Linux上的ZFS (ZoL)端口是健康和成熟的。 但是,目前不建议在生产环境中使用zfs Docker存储驱动程序,除非对Linux上的zfs有丰富的经验。
7)查看Docker使用的存储驱动
使用docker info 命令可以查看当前所使用存储驱动。
2、数据卷(Data Volumes)
数据卷(Data Volumes)就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统(Union File System),可以提供一些用于持续持久化存储或共享数据。完全独立于容器的生存周期,docker容器删除时,不会删除其挂载的数据卷。
宿主机挂载到容器有三种方式:
1)Volume
普通数据卷,映射到/var/lib/docker/volumes
目录下。
2)bind mounts
绑定数据卷,映射到宿主机指定路径下。
3)tmpfs mounts
临时卷,只存在于宿主机内存中。
3、普通数据卷(Volume)
1)创建Volume
docker volume create volumeName
例如,
docker volume create ubuntu_volume
2)查看所有数据卷
查看所有数据卷可以使用命令如下:
docker volume ls
3)查看指定数据卷详细信息
$ docker volume inspect ubuntu_volume
[
{
"CreatedAt": "2021-11-19T19:21:14+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/ubuntu_volume/_data",
"Name": "ubuntu_volume",
"Options": {},
"Scope": "local"
}
]
注意:通过上面示例可以看出,普通数据卷是存储在/var/lib/docekr/volumes/
目录。
4)挂载数据卷到容器
创建容器时,使用--mount选项,可以挂载普通卷,如下:
docker run -itd -p 88:80 --mount type=volume,source=ubuntu_volume,target=/usr/share/nginx/html nginx
注意:使用docker inspect
查看容器挂载信息。
5)删除清理券
容器被删除之后,数据卷还是存在的,不会被删除。需要删除数据或不再使用本地容器卷,可以手动删除数据券。如下,
docker volume rm volumeName
例如,
docker volume rm ubuntu_volume
4、绑定数据卷(bind mounts)
绑定数据卷可以在创建容器时,使用--mount
选项,指定宿主机目录,或者也可以使用之前支持的-v
参数指定映射目录关系。如下,
docker run -itd -p 81:80 --mount type=bind,source=/home/web,target=/usr/share/nginx/html nginx
或者
docker run -itd -p 81:80 -v /home/web:/usr/share/nginx/html nginx
注意:使用docker inspect
查看容器挂载信息。
5、临时卷(tmpfs mounts)
临时卷可以在创建容器时,使用--mount
选项,可以挂载临时卷,如下,
docker run -itd --mount type=tmpfs,target=/mydata ubuntu:18.04
注意:如有安全或其他原因,不想将数据持久化到容器或宿主机上,则可以使用tmpfs mounts模式。