概要
これまでにコンテナでデータボリュームを使用する方法として
- 単独でデータボリュームを作成する方法
- 別のコンテナの領域をデータボリュームとして利用する方法
- ホストマシンの領域をデータボリュームとして利用する方法
を紹介しました
今回は s3 の領域をデータボリュームとして利用する方法を紹介します
環境
- Mac OS X 10.12.3
- Docker on Mac 17.03.0-ce, build 60ccb22
- goofys 0.0.9
goofys のインストール
- brew tap homebrew/fuse
- brew cask install osxfuse
- brew install goofys
.aws/credentials
などの設定は事前に行っておいてください
また us-east-1 に適当にバケットを作成しておいてください
今回は「c1-bd10c735e495」とします
データボリューム領域の追加
事前に Docker on Mac の設定で /data-volume をデータボリューム領域として追加しておきます
Preferences から File Sharing で「/data-volume」を追加します
s3 のマウント
- sudo mkdir /data-volume
- sudo chown -R kakakikikeke:staff /data-volume/
- goofys c1-bd10c735e495 /data-volume
- df -h
c1-bd10c735e495 1.0Pi 0Bi 1.0Pi 0% 0 1000000000 0% /data-volume
こんな感じでマウントできれば OK です
試しにファイルを作成してバケット上にもファイルができるか確認してみてください
アンマウントする場合は
- umount /data-volume
で OK です
データボリュームとしてコンテナで使ってみる
- cd /data-volume
docker run --name c1 -p 8080:80 -v $(pwd):/test-volume nginx
でコンテナを起動しましょう
そして
- docker exec -it c1 /bin/bash
でログインして
- ls /test-volume
すると s3 にあるオブジェクトを確認できると思います
ただ、コンテナから
- echo fuga > /test-volume/fuga
という感じでデータボリューム領域に書き込もうとしても「bash: fuga: No such file or directory」と怒られてしまいました
なので
s3 -> file -> container
の GET の流れはうまく行ったのですが
container -> file -> s3
の POST の流れはうまく行きませんでした
最後に
データボリュームで s3 を使う方法を紹介しました
ホストマシン側で s3 をマウントしその領域をコンテナのデータボリュームとして利用しています
結果として GET の流れはコンテナ上でもできたのですが、POST の流れはコンテナからはできませんでした
(環境依存という可能性もありますが、、)
これを試していて思ったのですが、おそらくホストでマウントした s3 を更に docker のデータボリュームとしてマウントするのではなく、コンテナはコンテナで s3 をマウントしてホストはホストで s3 をマウントするようにしたほうが良いと思いました
今回 POST ができなかった原因は不明なのですが、おそらく権限とか docker 内部のデータボリュームの流れと goofys の流れがごっちゃになってしまっているせいかなと思います
コンテナ上でも goofys 的なのを動かして s3 をマウントすることはできると思うので、そうしたほうが良いかなと思った次第です
ただ調べてみるとそれも結構大変そうであまりおすすめできる感じではありませんでした、、、
http://qiita.com/kochizufan/items/e0253eeda0cd470c6dc8
あとは「そもそも dockerd 側のデータボリュームの領域を s3 にできないのか」という疑問を抱くと思います
実は dockerd 用のデータボリューム領域には様々なプラグインが用意されています
https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
これを dockerd に組み込めばデーモン側のデータボリューム領域としてクラウドサービスなどを使うことができます
Docker on Mac の場合デフォルトで「local」というプラグインが使われています
docker info コマンドを使えば確認することができます
これまでは dockerd 周りの拡張や検証はほとんど行ってこなかったので、その辺の dockerd 周りの検証もそのうちやりたいなと思っています
0 件のコメント:
コメントを投稿