问题
我在 Docker 容器中有一些非常慢的磁盘 IO。我正在使用 Boot2Docker,所以我现在实际上想知道问题是否出在 vboxsf 上?
测试
我最初使用这个脚本是因为我正在调试一个网络应用程序,但它似乎是磁盘读取本身。
我用 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。