dockerでgoofys環境を作ってS3をマウントしてみた


dockerでgoofys環境を作ってハンズオン的にS3をマウントして見ました。
その手順と使ってみた感想を紹介します。

ハンズオン手順

docker-compose作成

docker-compose.yaml
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ディレクトリなどは使えません。

以上です。