dockerでgoofys環境を作ってハンズオン的にS3をマウントして見ました。
その手順と使ってみた感想を紹介します。
#ハンズオン手順
##docker-compose作成
version: '2.1'
services:
goofys-test:
container_name: goofys-test
devices:
- /dev/fuse
cap_add:
- mknod
- sys_admin
image: serioja90/goofys
volumes:
- "~/.aws:/root/.aws"
environment:
- REGION=ap-northeast-1
- BUCKET=bucket_name
- MOUNT_DIR=/mnt/s3
bucket_nameをマウントしたいs3のbucket名に変えてください。
ロカールでaws configureを実行して鍵の設定をおこなってください。
##実行
docker-compose up
で実行
##動作確認
goofys-test | 2017/10/26 02:20:58.273812 main.INFO File system has been successfully mounted.
とでてれば起動は成功してることです。
docker exec -it `docker ps | grep goofys-test | awk '{print $1}'` sh
にてコンテナーにアクセスして
cd /mnt/s3
に移動すると指定したS3 bucketのデータがマウントされているはずです。
#感想
riofs,s3fsより早くなってるとはいえ
普通のファイルシステムと比べてめっちゃ遅い。
容量46MBのディレクトリをコピーしてみたら
time cp -rp xx/ xx
real 2m 41.89s
user 0m 0.02s
sys 0m 0.44s
2分40秒もかかる。。特にコピーするのが遅い感じです。
普通のファイルシステムだと
time cp -rp xx/ xx
real 0m0.061s
user 0m0.000s
sys 0m0.056s
なので結構パフォーマンスの課題はあります。
とはいえ直接S3をマウントっぽく参照できるメリットは大きく
読み込みしか使わないとかコピーに時間がかかっても問題ないケースでは使えるかもしれないです。
ググったら、goofysのマウントが勝手に切れるという記事を見かけましたが、私の検証でそのような自称は起こりませんでした。
その他触って見てわかったこと
当たり前ですが、s3上で扱えないデータは置くことができません。
例えばシンボリックを貼ることはできません。
bucket名しか指定できないです。
bucket名/xxディレクトリ
などは使えません。
以上です。