Docker 容器中的磁盘性能缓慢

7 performance docker

问题

我在 Docker 容器中有一些非常慢的磁盘 IO。我正在使用 Boot2Docker,所以我现在实际上想知道问题是否出在 vboxsf 上?

测试

我最初使用这个脚本是因为我正在调试一个网络应用程序,但它似乎是磁盘读取本身。

  • 在 Docker 中:1.6156311035156
  • 主持人:0.022423028945923

我用 dd 测试了磁盘速度以及容器内的结果:

$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=25000 && sync"; rm ddfile
25000+0 records in
25000+0 records out
204800000 bytes (205 MB) copied, 4.23099 s, 48.4 MB/s

real    0m4.241s
user    0m0.000s
sys 0m2.110s
Run Code Online (Sandbox Code Playgroud)

在主机上:

$ time sh -c "dd if=/dev/zero of=ddfile bs=8k count=25000 && sync"; rm ddfile
25000+0 records in
25000+0 records out
204800000 bytes transferred in 0.482290 secs (424640750 bytes/sec)
sh -c "dd if=/dev/zero of=ddfile bs=8k count=25000 && sync"  
0.01s user 0.30s system 48% cpu 0.650 total
Run Code Online (Sandbox Code Playgroud)

主机以字节为单位输出,容器以mbs为单位,但转换这些数字,速度差异约为速度的10倍。

我正在使用 Docker 的 -v host/folder:container:/folder 将代码库安装到容器中。我真的不确定从这里去哪里。Docker 挂载是否存在一些已知问题?或者可能有另一个问题在起作用?

小智 6

所以你使用的是mac。这意味着您正在 virtualbox 上安装 docker .. 所以这是存储的方式

os x -> virtualbox vm -> linux FS of choice -> aufs -> docker
Run Code Online (Sandbox Code Playgroud)

因此,您要在 docker 已有的基础上添加另一个 VM 层。

我认为没有人声称 docker IO 的性能会接近您在主机上看到的性能。


小智 6

问题是 vboxsf,而不是 docker。花了几天时间玩这个。vboxsf 非常慢。NFS 更快,这取决于您想要做什么。

我决定无论如何我都不需要主机上的文件,所以随后只是在我的 vagrant 文件中创建了一个新的虚拟磁盘,这是我的源被克隆到的地方,然后我只是备份该文件。

这很难用我发现的 boot2docker 来做,所以我只使用虚拟框和 vagrant 和我制作的图像,hp-ess/docker,其中包含最新的 docker 和 docker compose。