Docker for Macのファイル共有がめちゃくちゃ遅い
ホストと共有したディレクトリでcrosstool-ngのビルドなど行ってみると信じられないほど時間がかかったので簡単に検証してみる。
検証方法
10000個のファイルの作成・削除にかかる時間を、コンテナ内ディレクトリと共有ディレクトリについて計測する。 ファイル作成用のスクリプトは以下:
root@e42095502d60:/# cat /usr/bin/mkfiles #!/bin/bash mkdir tmp for i in $(seq $1); do echo $i >>tmp/$i.txt done
結果
まずコンテナ内ディレクトリ
root@e42095502d60:~# pwd /root root@e42095502d60:~# time mkfiles 10000 real 0m0.297s user 0m0.070s sys 0m0.220s root@e42095502d60:~# time rm -r tmp real 0m0.167s user 0m0.000s sys 0m0.160s
次に共有ディレクトリ(-v ${PWD}/synctest:/synctest
でコンテナを起動している)
root@e42095502d60:/synctest# pwd /synctest root@e42095502d60:/synctest# time mkfiles 10000 real 0m15.094s user 0m0.460s sys 0m1.520s root@e42095502d60:/synctest# time rm -r tmp real 0m5.633s user 0m0.030s sys 0m0.330s
冗談かと思うくらい遅い。
結論
大量のファイルを扱う操作はコンテナ内で閉じるようにして、必要最小限のファイルだけ共有ディレクトリに置く。