LoginSignup
12
12

More than 5 years have passed since last update.

s3fsのDockerコンテナを使ってS3をEC2にマウントする

Last updated at Posted at 2016-07-04

目的

あるバッチ処理を行うDockerコンテナで生成するCSVファイルをS3と同期したかったのでs3fsを使うことにしました。コンテナ自体にs3fsを入れてしまうのも一つの方法ですが、役割を分割するためにs3fs用の別コンテナを用意する形にしました。

最初思いついた方法がvolumes_fromオプションでディレクトリを共有する方法だったのですが、s3fsはFUSEファイルシステムをベースにしており、volumes_fromオプションはFUSEのマウントに対応していないためこの方法は断念しました。

Docker Hubで既に存在するイメージを検索してみたところ、以下のイメージが存在し共有マウントを使用する方法が載っていたため、こちらの方法に従ってやってみることにしました。
https://hub.docker.com/r/xueshanf/s3fs/

環境

  • OS: Amazon Linux AMI release 2016.03
  • Docker: 1.11.1
  • Docker Compose: 1.7.1

事前にDockerとDocker Composeをインストールしておきます。

yum update -y
yum install -y docker
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
service docker start

手順

共有マウントの設定

# mkdir /mnt/mydata
# mount --bind /mnt/mydata /mnt/mydata
# mount --make-shared /mnt/mydata
# findmnt -o TARGET,PROPAGATION /mnt/mydata
TARGET      PROPAGATION
/mnt/mydata shared

s3fsの設定

s3fs用のAWSのキー設定のファイルを作成しておきます。

# echo "<accessId>:<acessSecrect>" > /root/.s3fs
# chmod 600 /root/.s3fs

docker-compose.ymlの作成

docker-composeの定義を用意します。

version: '2'

services:
  app:
    image: busybox
    volumes:
      - /mnt/mydata:/mnt
  s3fs:
    image: xueshanf/s3fs:latest
    environment:
      AWSACCESSKEYID: <accessId>
      AWSSECRETACCESSKEY: <acessSecrect>
    cap_add:
      - MKNOD
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    devices:
      - /dev/fuse
    volumes:
      - /mnt/mydata:/mnt:shared
      - /root/.s3fs:/root/.s3fs
    command: /usr/bin/s3fs -f -o allow_other -o use_cache=/tmp -o passwd_file=/root/.s3fs docker-s3fs-test /mnt/

s3fs用のコンテナとapp用のコンテナとなります。

s3fsコンテナを起動

# docker-compose run -d s3fs

※共有マウントが有効でないと言われてしまう場合は、一度Docker Daemonを再起動して再度試してみてください

ホストマシンでS3マウントが有効かどうかを確認

まずはホスト側でS3がマウントされているかどうかを確認してみます。マウントディレクトリでファイルを作成します。

# touch /mnt/mydata/hello

S3 Bucketの中を確認するとファイルが追加されていることを確認できます。

# aws s3 ls s3://docker-s3fs-test
2016-07-04 05:55:59          0 hello

appコンテナ内でS3マウントが有効かどうかを確認

appコンテナを起動して、マウントディレクトリにファイルを追加してみます。

# docker-compose run --rm app touch /mnt/world

S3にファイルが追加されていることを確認できます。

# aws s3 ls s3://docker-s3fs-test
2016-07-04 05:55:59          0 hello
2016-07-04 05:57:56          0 world
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12