docs.dockoro.cn/docs/storage/drivers/vfs-driver.md
2024-12-26 20:08:38 +08:00

88 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
outline: [2,5]
---
# VFS 存储驱动程序
VFS 存储驱动程序不是联合文件系统。每个层都是磁盘上的一个目录,并且不支持写入时复制。要创建新图层,需要对前一图层进行“深层复制”。与其他存储驱动程序相比,这会导致性能较低且磁盘上使用的空间更多。但是,它健壮、稳定,并且适用于各种环境。它还可以用作在测试环境中验证其他存储后端的机制。
## 使用 `vfs` 存储驱动程序配置 Docker
1. 停止 Docker。
```bash
sudo systemctl stop docker
```
2. 编辑 `/etc/docker/daemon.json`。如果尚不存在,请创建它。假设文件为空,请添加以下内容。
```json
{
"storage-driver": "vfs"
}
```
如果要设置配额来控制 VFS 存储驱动程序可以使用的最大大小,请在 `storage-opts` 键上设置 `size` 选项。
```json
{
"storage-driver": "vfs",
"storage-opts": ["size=256M"]
}
```
如果 `daemon.json` 文件包含无效的 JSON则 Docker 不会启动。
3. 启动 Docker。
```bash
sudo systemctl start docker
```
4. 验证守护程序是否正在使用 `vfs` 存储驱动程序。使用 `docker info` 命令并查找 `Storage Driver`
```bash
docker info
Storage Driver: vfs
...
```
Docker 现在正在使用 `vfs` 存储驱动程序。Docker 已自动创建 `/var/lib/docker/vfs/` 目录,其中包含正在运行的容器使用的所有层。
## `vfs` 存储驱动程序的工作原理
每个映像层和可写容器层在 Docker 主机上表示为 `/var/lib/docker/` 中的子目录。union 挂载提供所有层的统一视图。目录名称并不直接与层本身的 ID 对应。
VFS 不支持写入时复制 COW。每次创建新图层时 它是其父图层的深层副本。这些图层都位于 `/var/lib/docker/vfs/dir/` 中。
### 示例:映像和容器磁盘构造
以下 `docker pull` 命令显示了一个 Docker 主机正在下载一个包含五个层的 Docker 镜像。
```bash
docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
e0a742c2abfd: Pull complete
486cb8339a27: Pull complete
dc6f0d824617: Pull complete
4f7a5649a30e: Pull complete
672363445ad2: Pull complete
Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f
Status: Downloaded newer image for ubuntu:latest
```
拉取后,这些层中的每一个都表示为 `/var/lib/docker/vfs/dir/` 中。目录名称与 `docker pull` 命令中显示的映像层 ID 不相关。要查看每一层在磁盘上占用的大小,您可以使用 `du -sh` 命令,该命令将大小作为人类可读的值提供。
```bash
ls -l /var/lib/docker/vfs/dir/
total 0
drwxr-xr-x. 2 root root 19 Aug 2 18:19 3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e
drwxr-xr-x. 21 root root 224 Aug 2 18:23 6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561
drwxr-xr-x. 21 root root 224 Aug 2 18:23 6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c
drwxr-xr-x. 21 root root 224 Aug 2 18:23 9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab
drwxr-xr-x. 21 root root 224 Aug 2 18:23 a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895
drwxr-xr-x. 21 root root 224 Aug 2 18:23 e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b
```
```bash
du -sh /var/lib/docker/vfs/dir/*
4.0K /var/lib/docker/vfs/dir/3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e
125M /var/lib/docker/vfs/dir/6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561
104M /var/lib/docker/vfs/dir/6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c
125M /var/lib/docker/vfs/dir/9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab
104M /var/lib/docker/vfs/dir/a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895
104M /var/lib/docker/vfs/dir/e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b
```
上面的输出显示,三层各占用 104M两层占用 125M。这些目录彼此之间只有很小的差异但它们都占用相同的磁盘空间量。这是使用 `vfs` 存储驱动程序的缺点之一。
## 相关信息
- [了解映像、容器和存储驱动程序](./../drivers/)
- [选择存储驱动程序](./select-storage-driver)