问题
我的 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
在主机上:
$ 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
主机以字节为单位输出,容器以mbs为单位输出,但转换这些数字,速度差异大约是10倍。
我正在使用 Docker 的 -v host/folder:container:/folder 将代码库挂载到容器中。我不太确定接下来该怎么做。Docker 挂载是否存在一些已知问题?或者可能存在其他问题?
答案1
所以你使用的是 Mac。这意味着你在 VirtualBox 上安装 Docker。存储方式如下
os x -> virtualbox vm -> linux FS of choice -> aufs -> docker
因此,您要在 Docker 已有的基础上添加另一个 VM 层。
我认为没有人声称 docker IO 的性能会接近你在主机上看到的。
答案2
问题出在 vboxsf,而不是 docker。花了好几天时间玩这个。vboxsf 非常非常慢。NFS 更快,不过取决于你想做什么。
我决定无论如何我都不需要主机上的文件,因此随后只需在我的 vagrant 文件中创建一个新的虚拟磁盘,我的源就会克隆到该虚拟磁盘,然后我只需备份该文件即可。
我发现使用 boot2docker 很难做到这一点,所以我只使用虚拟盒和 vagrant 以及我制作的图像,hp-ess/docker 中有最新的 docker 和 docker compose。