Device Mapper 存储驱动程序(已弃用)
荒废的
Device Mapper 驱动程序已弃用, 并在 Docker Engine v25.0 中删除。如果您使用的是 Device Mapper, 在升级到 Docker 之前,您必须迁移到受支持的存储驱动程序 引擎 v25.0。阅读 Docker 存储驱动程序页面,了解支持的存储驱动程序。
Device Mapper 是一个基于内核的框架,它支持许多高级
Linux 上的卷管理技术。Docker 的devicemapper
存储驱动程序
利用此框架的精简配置和快照功能
用于镜像和容器管理。本文引用 Device Mapper
storage 驱动程序设置为devicemapper
,内核框架作为 Device Mapper 进行。
对于支持它的系统,devicemapper
支持包含在
Linux 内核。但是,需要特定的配置才能将其与
Docker。
这devicemapper
驱动程序使用专用于 Docker 的块设备,并在
块级别,而不是文件级别。这些设备可以通过以下方式进行扩展
将物理存储添加到您的 Docker 主机,它们的性能比使用
作系统 (OS) 级别的文件系统。
先决条件
devicemapper
在 Docker Engine 上受支持 - 在 CentOS、Fedora 上运行的社区、 SLES 15、Ubuntu、Debian 或 RHEL。devicemapper
需要lvm2
和device-mapper-persistent-data
包 进行安装。- 更改存储驱动程序会生成您已经拥有的任何容器
在本地系统上创建无法访问。用
docker save
要保存容器, 并将现有镜像推送到 Docker Hub 或私有存储库,因此您可以 无需稍后重新创建它们。
使用devicemapper
存储驱动程序
在执行这些过程之前,您必须首先满足所有先决条件。
配置loop-lvm
测试模式
此配置仅适用于测试。这loop-lvm
mode 使
使用“环回”机制,允许本地磁盘上的文件
读取和写入,就好像它们是实际的物理磁盘或块一样
装置。
但是,添加了环回机制,并与作系统交互
filesystem 层,这意味着 IO作可能很慢且占用大量资源。
使用环回设备也会引入争用条件。
但是,设置loop-lvm
模式可以帮助识别基本问题(例如
缺少用户空间包、内核驱动程序等)在尝试更多
启用 需要复杂的设置direct-lvm
模式。loop-lvm
mode 应
因此,仅用于在配置之前执行基本测试direct-lvm
.
对于生产系统,请参阅为生产配置 direct-lvm 模式。
停止 Docker。
$ sudo systemctl stop docker
编辑
/etc/docker/daemon.json
.如果尚不存在,请创建它。若 该文件为空,请添加以下内容。{ "storage-driver": "devicemapper" }
请参阅 daemon 参考文档中每个存储驱动程序的所有存储选项
如果
daemon.json
文件包含格式错误的 JSON。启动 Docker。
$ sudo systemctl start docker
验证守护进程是否正在使用
devicemapper
storage 驱动程序。使用docker info
命令并查找Storage Driver
.$ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.03.1-ce Storage Driver: devicemapper Pool Name: docker-202:1-8413957-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 11.8 MB Data Space Total: 107.4 GB Data Space Available: 7.44 GB Metadata Space Used: 581.6 KB Metadata Space Total: 2.147 GB Metadata Space Available: 2.147 GB Thin Pool Minimum Free Space: 10.74 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/metadata Library Version: 1.02.135-RHEL7 (2016-11-16) <...>
此主机正在运行loop-lvm
模式,不支持
生产系统。这可以通过以下事实来证明:Data loop file
以及Metadata loop file
位于/var/lib/docker/devicemapper
.这些是环回挂载的
稀疏文件。对于生产系统,请参阅为生产配置 direct-lvm 模式。
为生产环境配置 direct-lvm 模式
使用devicemapper
存储驱动程序必须使用direct-lvm
模式。此模式使用块设备创建精简池。这比
使用 Loopback 设备,更有效地使用系统资源,并阻止
设备可以根据需要增长。但是,需要的设置比loop-lvm
模式。
满足先决条件后,请按照以下步骤作
将 Docker 配置为使用devicemapper
存储驱动程序direct-lvm
模式。
警告
更改存储驱动程序会生成您已经拥有的任何容器 在本地系统上创建无法访问。用
docker save
要保存容器, 并将现有镜像推送到 Docker Hub 或私有存储库,因此您不会 需要稍后重新创建它们。
允许 Docker 配置 direct-lvm 模式
Docker 可以为您管理块设备,简化direct-lvm
模式。这仅适用于新的 Docker 设置。您只能使用
单块设备。如果您需要使用多个块存储设备,请手动配置 direct-lvm 模式。
以下新配置选项可用:
选择 | 描述 | 必填? | 违约 | 例 |
---|---|---|---|---|
dm.directlvm_device | 要配置的块存储设备的路径direct-lvm . | 是的 | dm.directlvm_device="/dev/xvdf" | |
dm.thinp_percent | 用于存储传入的块存储设备的空间百分比。 | 不 | 95 | dm.thinp_percent=95 |
dm.thinp_metapercent | 用于传入块存储设备中的元数据存储的空间百分比。 | 不 | 1 | dm.thinp_metapercent=1 |
dm.thinp_autoextend_threshold | lvm 何时应自动扩展精简池的阈值(占总存储空间的百分比)。 | 不 | 80 | dm.thinp_autoextend_threshold=80 |
dm.thinp_autoextend_percent | 触发 autoextend 时增加精简池的百分比。 | 不 | 20 | dm.thinp_autoextend_percent=20 |
dm.directlvm_device_force | 是否格式化块设备,即使其上已存在文件系统。如果设置为false 如果存在文件系统,则会记录错误,并且文件系统保持不变。 | 不 | 假 | dm.directlvm_device_force=true |
编辑daemon.json
文件并设置适当的选项,然后重新启动 Docker
以使更改生效。以下内容daemon.json
configuration 设置所有
选项。
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.directlvm_device=/dev/xdf",
"dm.thinp_percent=95",
"dm.thinp_metapercent=1",
"dm.thinp_autoextend_threshold=80",
"dm.thinp_autoextend_percent=20",
"dm.directlvm_device_force=false"
]
}
请参阅 daemon 参考文档中每个存储驱动程序的所有存储选项
重新启动 Docker 以使更改生效。Docker 调用命令 为您配置块设备。
警告
在 Docker 为您准备好块设备后更改这些值是 不支持,并导致错误。
您仍然需要执行定期维护任务。
手动配置 direct-lvm 模式
下面的过程将创建一个配置为精简池的逻辑卷,以
用作存储池的备份。它假定您有一个备用块
device 位于/dev/xvdf
有足够的可用空间来完成任务。设备
标识符和卷大小在您的环境中可能不同,而您
应在整个过程中替换您自己的值。该程序还
假设 Docker 守护程序位于stopped
州。
确定要使用的块设备。该设备位于
/dev/
(例如/dev/xvdf
),并且需要足够的可用空间来存储 托管运行的工作负载的镜像和容器层。 固态驱动器是理想的选择。停止 Docker。
$ sudo systemctl stop docker
安装以下软件包:
RHEL / CentOS:
device-mapper-persistent-data
,lvm2
和所有 依赖Ubuntu / Debian / SLES 15:
thin-provisioning-tools
,lvm2
和所有 依赖
从步骤 1 开始,使用
pvcreate
命令。将设备名称替换为/dev/xvdf
.警告
接下来的几个步骤是破坏性的,因此请确保您已指定 正确的设备。
$ sudo pvcreate /dev/xvdf Physical volume "/dev/xvdf" successfully created.
创建一个
docker
卷组,使用vgcreate
命令。$ sudo vgcreate docker /dev/xvdf Volume group "docker" successfully created
创建两个名为
thinpool
和thinpoolmeta
使用lvcreate
命令。最后一个参数指定可用空间量 允许在空间不足时自动扩展数据或元数据, 作为临时的权宜之计。这些是建议的值。$ sudo lvcreate --wipesignatures y -n thinpool docker -l 95%VG Logical volume "thinpool" created. $ sudo lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG Logical volume "thinpoolmeta" created.
将卷转换为精简池和元数据的存储位置 thin pool 使用
lvconvert
命令。$ sudo lvconvert -y \ --zero n \ -c 512K \ --thinpool docker/thinpool \ --poolmetadata docker/thinpoolmeta WARNING: Converting logical volume docker/thinpool and docker/thinpoolmeta to thin pool's data and metadata volumes with metadata wiping. THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.) Converted docker/thinpool to thin pool.
通过
lvm
轮廓。$ sudo vi /etc/lvm/profile/docker-thinpool.profile
指定
thin_pool_autoextend_threshold
和thin_pool_autoextend_percent
值。thin_pool_autoextend_threshold
是之前使用的空间百分比lvm
尝试自动扩展可用空间(100 = 已禁用,不推荐)。thin_pool_autoextend_percent
是要添加到设备的空间量 自动扩展时(0 = 禁用)。以下示例在磁盘使用率达到 20% 时增加 20% 的容量 80%.
activation { thin_pool_autoextend_threshold=80 thin_pool_autoextend_percent=20 }
保存文件。
使用
lvchange
命令。$ sudo lvchange --metadataprofile docker-thinpool docker/thinpool Logical volume docker/thinpool changed.
确保已启用对逻辑卷的监控。
$ sudo lvs -o+seg_monitor LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor thinpool docker twi-a-t--- 95.00g 0.00 0.01 not monitored
如果
Monitor
列报告,如上,卷为not monitored
,则需要显式启用监控。没有 此步骤,逻辑卷的自动扩展不会发生, 无论应用的配置文件中的任何设置如何。$ sudo lvchange --monitor y docker/thinpool
通过运行
sudo lvs -o+seg_monitor
命令。这Monitor
列 现在应该报告逻辑卷正在monitored
.如果您以前曾在此主机上运行过 Docker,或者如果
/var/lib/docker/
存在,将其移开,以便 Docker 可以使用新的 LVM 池 存储 Image 和 Containers 的内容。$ sudo su - # mkdir /var/lib/docker.bk # mv /var/lib/docker/* /var/lib/docker.bk # exit
如果以下任何步骤失败,并且您需要恢复,您可以删除
/var/lib/docker
并将其替换为/var/lib/docker.bk
.编辑
/etc/docker/daemon.json
并配置devicemapper
storage 驱动程序。如果文件以前为空,则它应该 现在包含以下内容:{ "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/docker-thinpool", "dm.use_deferred_removal=true", "dm.use_deferred_deletion=true" ] }
启动 Docker。
systemd 的
$ sudo systemctl start docker
服务范围:
$ sudo service docker start
验证 Docker 是否正在使用新配置
docker info
.$ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.03.1-ce Storage Driver: devicemapper Pool Name: docker-thinpool Pool Blocksize: 524.3 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: Metadata file: Data Space Used: 19.92 MB Data Space Total: 102 GB Data Space Available: 102 GB Metadata Space Used: 147.5 kB Metadata Space Total: 1.07 GB Metadata Space Available: 1.069 GB Thin Pool Minimum Free Space: 10.2 GB Udev Sync Supported: true Deferred Removal Enabled: true Deferred Deletion Enabled: true Deferred Deleted Device Count: 0 Library Version: 1.02.135-RHEL7 (2016-11-16) <...>
如果 Docker 配置正确,则
Data file
和Metadata file
是 blank,并且存储池名称为docker-thinpool
.验证配置正确后,您可以删除
/var/lib/docker.bk
目录中,其中包含先前的配置。$ sudo rm -rf /var/lib/docker.bk
管理 devicemapper
监视精简池
不要单独依赖 LVM 自动扩展。卷组
自动扩展,但卷仍可填满。您可以监控
卷上的可用空间lvs
或lvs -a
.考虑使用监控
工具,例如 Nagios。
要查看 LVM 日志,您可以使用journalctl
:
$ sudo journalctl -fu dm-event.service
如果反复遇到精简池问题,则可以设置存储选项dm.min_free_space
的值(表示百分比)/etc/docker/daemon.json
.例如,将其设置为10
确保
当可用空间等于或接近 10% 时,作失败并显示警告。
请参阅 Engine 守护程序参考中的 storage driver 选项。
增加正在运行的设备的容量
您可以增加正在运行的精简池设备上的池容量。这是 如果数据的逻辑卷已满且卷组已满,则很有用 能力。具体过程取决于您使用的是 loop-lvm 精简池还是 direct-lvm 精简池。
调整 loop-lvm thin 池的大小
调整loop-lvm
thin pool 是使用 device_tool 实用程序,
但您可以改用 Operating System Utilities。
使用 device_tool 实用程序
一个名为device_tool.go
在 moby/moby Github 存储库中提供。您可以使用此工具调整loop-lvm
薄池 /
避免上述漫长的过程。此工具不保证有效,但您
应该只使用loop-lvm
在非生产系统上。
如果您不想使用device_tool
中,您可以手动调整精简池的大小。
要使用该工具,请克隆 Github 存储库,更改为
contrib/docker-device-tool
,然后按照README.md
以编译该工具。使用该工具。以下示例将精简池的大小调整为 200GB。
$ ./device_tool resize 200GB
使用作系统实用程序
如果您不想使用 device-tool 实用程序,
您可以调整loop-lvm
使用以下过程手动精简池。
在loop-lvm
模式,则使用环回设备存储数据,并使用另一个
以存储元数据。loop-lvm
mode 仅支持用于测试,因为
它具有明显的性能和稳定性缺点。
如果您正在使用loop-lvm
mode 时,将docker info
显示文件
的 pathsData loop file
和Metadata loop file
:
$ docker info |grep 'loop file'
Data loop file: /var/lib/docker/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/metadata
按照以下步骤增加精简池的大小。在此示例中, 精简池为 100 GB,并增加到 200 GB。
列出设备的大小。
$ sudo ls -lh /var/lib/docker/devicemapper/ total 1175492 -rw------- 1 root root 100G Mar 30 05:22 data -rw------- 1 root root 2.0G Mar 31 11:17 metadata
增加
data
文件设置为 200 Gtruncate
命令 用于增大或减小文件大小。请注意, 减小大小是一种破坏性作。$ sudo truncate -s 200G /var/lib/docker/devicemapper/data
验证文件大小是否已更改。
$ sudo ls -lh /var/lib/docker/devicemapper/ total 1.2G -rw------- 1 root root 200G Apr 14 08:47 data -rw------- 1 root root 2.0G Apr 19 13:27 metadata
环回文件在磁盘上已更改,但在内存中未更改。列出 的大小 内存中的环回设备,以 GB 为单位。重新加载它,然后再次列出大小。 重新加载后,大小为 200 GB。
$ echo $[ $(sudo blockdev --getsize64 /dev/loop0) / 1024 / 1024 / 1024 ] 100 $ sudo losetup -c /dev/loop0 $ echo $[ $(sudo blockdev --getsize64 /dev/loop0) / 1024 / 1024 / 1024 ] 200
重新加载 devicemapper 精简池。
一个。首先获取池名称。存储池名称是第一个字段,由
:
.此命令将提取它。$ sudo dmsetup status | grep ' thin-pool ' | awk -F ': ' {'print $1'} docker-8:1-123141-pool
b.转储精简池的设备映射器表。
$ sudo dmsetup table docker-8:1-123141-pool 0 209715200 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing
c. 使用第二个字段计算精简池的总扇区数 的输出。该数字以 512-k 扇区表示。一个 100G 文件具有 209715200 512-k 扇区。如果将此数字翻倍到 200G,则得到 419430400 512-k 扇区。
d. 使用以下命令使用新的扇区号重新加载精简池 三
dmsetup
命令。$ sudo dmsetup suspend docker-8:1-123141-pool $ sudo dmsetup reload docker-8:1-123141-pool --table '0 419430400 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing' $ sudo dmsetup resume docker-8:1-123141-pool
调整 direct-lvm 精简池的大小
要扩展direct-lvm
thin pool,您需要先附加一个新的块存储设备
添加到 Docker 主机中,并记下内核为其分配的名称。在
在此示例中,新的块设备为/dev/xvdg
.
按照以下过程扩展direct-lvm
thin pool,将
block device 和其他参数来适应你的情况。
收集有关卷组的信息。
使用
pvdisplay
命令查找当前位于 use 替换为您的精简池和卷组的名称。$ sudo pvdisplay |grep 'VG Name' PV Name /dev/xvdf VG Name docker
在以下步骤中,将块存储设备或卷组名称替换为 适当。
使用
vgextend
命令与VG Name
以及新块存储设备的名称。$ sudo vgextend docker /dev/xvdg Physical volume "/dev/xvdg" successfully created. Volume group "docker" successfully extended
扩展
docker/thinpool
逻辑卷。此命令使用 100% 的 卷,没有自动扩展。扩展元数据精简池 相反,请使用docker/thinpool_tmeta
.$ sudo lvextend -l+100%FREE -n docker/thinpool Size of logical volume docker/thinpool_tdata changed from 95.00 GiB (24319 extents) to 198.00 GiB (50688 extents). Logical volume docker/thinpool_tdata successfully resized.
使用
Data Space Available
字段中的 output 的docker info
.如果您扩展了docker/thinpool_tmeta
逻辑 volume 中,请查找Metadata Space Available
.Storage Driver: devicemapper Pool Name: docker-thinpool Pool Blocksize: 524.3 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: Metadata file: Data Space Used: 212.3 MB Data Space Total: 212.6 GB Data Space Available: 212.4 GB Metadata Space Used: 286.7 kB Metadata Space Total: 1.07 GB Metadata Space Available: 1.069 GB <...>
激活devicemapper
重新启动后
如果重启主机并发现docker
服务启动失败,
查找错误 “Non existing device”。您需要重新激活
使用以下命令的逻辑卷:
$ sudo lvchange -ay docker/thinpool
如何devicemapper
存储驱动程序工作
警告
不要直接作
/var/lib/docker/
.这些文件和目录由 Docker 管理。
使用lsblk
命令查看设备及其存储池,从作
系统的观点:
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 100G 0 disk
├─docker-thinpool_tmeta 253:0 0 1020M 0 lvm
│ └─docker-thinpool 253:2 0 95G 0 lvm
└─docker-thinpool_tdata 253:1 0 95G 0 lvm
└─docker-thinpool 253:2 0 95G 0 lvm
使用mount
命令以查看 Docker 正在使用的挂载点:
$ mount |grep devicemapper
/dev/xvda1 on /var/lib/docker/devicemapper type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
当您使用devicemapper
中,Docker 将镜像和层内容存储在
thin池,并通过将它们挂载到
的子目录/var/lib/docker/devicemapper/
.
磁盘上的镜像和容器层
这/var/lib/docker/devicemapper/metadata/
目录包含有关
Devicemapper 配置本身以及每个镜像和容器层
存在。这devicemapper
存储驱动程序使用快照,并且此元数据
包括有关这些快照的信息。这些文件采用 JSON 格式。
这/var/lib/docker/devicemapper/mnt/
目录包含每个镜像的挂载点
和存在的容器层。镜像层挂载点为空,但
容器的挂载点显示容器的文件系统,就像它从
在容器内。
镜像分层和共享
这devicemapper
存储驱动程序使用专用块设备,而不是
格式化的文件系统,并在块级别对文件执行最大
写入时复制 (CoW)作期间的性能。
快照
另一个特点devicemapper
是它使用快照(有时也称为瘦设备或虚拟设备),这些快照存储了
每一层都是非常小、轻量级的薄池。快照提供了许多
好处:
在容器之间共享的层仅存储在磁盘上 一次,除非它们是可写的。例如,如果您有 10 个不同的 镜像,这些镜像均基于
alpine
这alpine
image 及其所有 父镜像在磁盘上只存储一次。快照是写入时复制 (CoW) 策略的实现。这意味着 仅将给定文件或目录复制到容器的可写对象 层。
因为
devicemapper
在区块级别运行,在 可写层可以同时修改。可以使用标准的作系统级备份实用程序备份快照。只 复制
/var/lib/docker/devicemapper/
.
Devicemapper 工作流程
当您使用devicemapper
存储驱动程序、所有对象
与 镜像和容器层的/var/lib/docker/devicemapper/
,它由一个或多个块级
设备,环回设备(仅用于测试)或物理磁盘。
基本设备是最低级别的对象。这是 thin pool 本身。 您可以使用
docker info
.它包含一个文件系统。这个基地 device 是每个镜像和容器层的起点。基地 device 是 Device Mapper 实现细节,而不是 Docker 层。有关基本设备和每个镜像或容器层的元数据存储在
/var/lib/docker/devicemapper/metadata/
JSON 格式。这些层是 写入时复制快照,这意味着它们在发散之前是空的 从其父图层。每个容器的可写层都挂载在
/var/lib/docker/devicemapper/mnt/
.每个 只读镜像层和每个已停止的容器。
每个镜像图层都是其下方图层的快照。每个
image 是池中存在的基本设备的快照。当您运行
container 的 Shell,它是容器所基于的镜像的快照。以下内容
示例显示了具有两个正在运行的容器的 Docker 主机。第一个是ubuntu
容器,第二个是busybox
容器。

容器读取和写入的工作原理devicemapper
读取文件
跟devicemapper
,读取发生在块级别。下图显示
读取单个块 (0x44f
)
容器。

应用程序对 block 发出读取请求0x44f
在容器中。因为
容器是镜像的薄快照,它没有块,但它
有一个指针,指向它确实存在的最近父镜像上的块,并且
它从那里读取块。该块现在存在于容器的内存中。
写入文件
编写新文件:使用devicemapper
驱动程序, 将新数据写入
container 是通过按需分配作完成的。每个块
新文件被分配到容器的可写层中,块是
写在那里。
更新现有文件:从 它所在的 nearest 图层。当容器写入文件时,只有 修改后的块将写入容器的可写层。
删除文件或目录:当您删除
容器的可写层,或者当镜像层删除存在的文件时
在其父层中,devicemapper
存储驱动程序拦截进一步读取
尝试对该文件或目录执行作,并响应该文件或目录执行
不存在。
写入然后删除文件:如果容器写入文件及更高版本
删除文件,所有这些作都发生在容器的 writable
层。在这种情况下,如果您使用direct-lvm
,则块将被释放。如果你
用loop-lvm
,则块可能无法释放。这是不使用loop-lvm
在生产中。
Device Mapper 和 Docker 性能
allocate-on demand
性能影响:这
devicemapper
存储驱动程序使用allocate-on-demand
作设置为 将 thin pool 中的新块分配到容器的可写层中。 每个块为 64KB,因此这是使用的最小空间量 进行写入。写入时复制性能影响:容器首次修改 specific 块,则该块将写入容器的可写层。 因为这些写入发生在块级别而不是文件级别,所以 将性能影响降至最低。但是,写入大量块可以 仍然会对性能产生负面影响,并且
devicemapper
存储驱动程序可能 实际上,在这种情况下,性能比其他存储驱动程序差。为 写入密集型工作负载,您应该使用数据卷,这会绕过存储 驱动程序。
性能最佳实践
请记住这些事项,以便在使用devicemapper
storage 驱动程序。
用
direct-lvm
:这loop-lvm
mode 不执行,不应 用于生产。使用快速存储:固态硬盘 (SSD) 提供更快的读取速度和 写入次数比旋转磁盘的次数多。
内存使用情况:
devicemapper
比其他存储使用更多的内存 司机。每个启动的容器都会将其文件的一个或多个副本加载到 memory,具体取决于同一文件的块数 同一时间。由于内存压力,devicemapper
存储驱动程序 对于高密度使用案例中的某些工作负载来说,这可能不是正确的选择。将卷用于写入密集型工作负载:卷提供最好和最 为写入密集型工作负载提供可预测的性能。这是因为他们绕过了 存储驱动程序,并且不会产生任何引入的潜在开销 通过精简配置和写入时复制。卷还有其他好处,例如 允许您在容器之间共享数据,并在没有 正在运行的容器正在使用它们。
注意
使用
devicemapper
和json-file
log 驱动程序,默认情况下,容器生成的日志文件仍然存储在 Docker 的 dataroot 目录中/var/lib/docker
.如果您的容器生成大量日志消息,这可能会导致磁盘使用量增加或由于磁盘已满而无法管理系统。您可以配置日志驱动程序以在外部存储容器日志。