HsOjo’s Blog

📒 A powerless rookie's tree hole.

DinD 场景下IO性能问题分析

2023-07-1300 分钟
type
status
date
slug
summary
tags
category
icon
password

前言

Docker in Docker(DinD)是一种在容器内运行 Docker 的解决方案,但在未为 DinD 容器使用 Volume 时,内部容器的 Copy-on-Write(写时复制)存储驱动会严重影响性能。

分析

当试图在容器内使用 Docker,且不使用 Volume 为内部 Docker 提供存储时,内部 Docker 将无法使用 OverlayFS 作为 Storage Driver,而是使用了 Copy-on-Write(写时复制)作为 Storage Driver。
由于 Copy-on-Write 存储驱动的特性,写操作需要在容器的副本中进行,需要进行额外的复制和写入操作。这会导致写操作的性能严重下降,特别是在频繁的写入场景下。
但如果在外部 Docker 使用 Volume 为内部 Docker 提供存储(即将 Volume 挂载至 /var/lib/docker)时,便可使用 OverlayFS(overlay2)作为内部 Docker 的容器存储驱动。

解决方案

在编写 Dockerfile 时,为 DinD 镜像声明内部 Docker 存储位置的存储卷(/var/lib/docker)即可。

下一篇

在 Vite 项目中使用 DataV

Loading...