MinioはAmazon S3互換の分散オブジェクトストレージサーバです。
Minio: Private cloud storage
https://www.minio.io/
Dockerイメージが提供されており手軽にローカルで環境構築できるので試してみました。
前提
DockerとAWS CLIがインストールされている前提です。
> docker --version
Docker version 18.09.2, build 6247962
> docker-compose --version
docker-compose version 1.23.2, build 1110ad01
> aws --version
aws-cli/1.16.27 Python/3.6.6 Darwin/18.0.0 botocore/1.12.17
準備
docker-compose.yml
を用意します。公式サイトでyamlファイル生成のためのツールが提供されているので、それを利用します。
> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> touch docker-compose.yml
version: '2'
services:
minio1:
image: minio/minio
volumes:
- hoge1:/export
ports:
- "9001:9000"
environment:
MINIO_ACCESS_KEY: hogehoge
MINIO_SECRET_KEY: hogehoge
command: server http://minio{1...4}/export
minio2:
image: minio/minio
volumes:
- hoge2:/export
ports:
- "9002:9000"
environment:
MINIO_ACCESS_KEY: hogehoge
MINIO_SECRET_KEY: hogehoge
command: server http://minio{1...4}/export
minio3:
image: minio/minio
volumes:
- hoge3:/export
ports:
- "9003:9000"
environment:
MINIO_ACCESS_KEY: hogehoge
MINIO_SECRET_KEY: hogehoge
command: server http://minio{1...4}/export
minio4:
image: minio/minio
volumes:
- hoge4:/export
ports:
- "9004:9000"
environment:
MINIO_ACCESS_KEY: hogehoge
MINIO_SECRET_KEY: hogehoge
command: server http://minio{1...4}/export
## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
hoge1:
hoge2:
hoge3:
hoge4:
最低ノード数が4つですが、開発で利用するだけならば1つにしても良いかもしれません。
起動してみる
> docker-compose up
(略)
minio1_1 | Status: 4 Online, 0 Offline.
minio1_1 | Endpoint: http://172.21.0.2:9000 http://127.0.0.1:9000
minio1_1 |
minio1_1 | Browser Access:
minio1_1 | http://172.21.0.2:9000 http://127.0.0.1:9000
minio1_1 |
minio1_1 | Object API (Amazon S3 compatible):
minio1_1 | Go: https://docs.minio.io/docs/golang-client-quickstart-guide
minio1_1 | Java: https://docs.minio.io/docs/java-client-quickstart-guide
minio1_1 | Python: https://docs.minio.io/docs/python-client-quickstart-guide
minio1_1 | JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
minio1_1 | .NET: https://docs.minio.io/docs/dotnet-client-quickstart-guide
出力を見る限り9000
ポートからアクセスできそうなのですが、docker-compse.yml
で各ノードの9000
を9001-4
に割り当てているので、そちらからアクセスすることができます。
docker-compse.yml
を編集して、ノードを1つにしてみます。
version: '2'
services:
minio1:
image: minio/minio
volumes:
- hoge:/export
ports:
- "9000:9000"
environment:
MINIO_ACCESS_KEY: hogehoge
MINIO_SECRET_KEY: hogehoge
command: server http://minio{1...4}/export
## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
hoge:
あらためてコンテナを立ち上げます。
> docker-compose up -d
立ち上がったらAWS CLIでバケットの作成とファイル(オブジェクト)をPUTしてみます。
> aws configure --profile minio
# docker-compose.ymlで指定した`Access Key ID`と`Secret Access Key`を指定
# バケットの作成
> aws \
--endpoint-url http://127.0.0.1:9000 \
--profile minio s3 mb s3://hoge
make_bucket: hoge
# ファイルのアップロード
> aws \
--endpoint-url http://127.0.0.1:9000 \
--profile minio s3 cp ./docker-compose.yml \
s3://hoge
upload: ./docker-compose.yml to s3://hoge/docker-compose.yml
# ファイルリストの取得
> aws \
--endpoint-url http://127.0.0.1:9000 \
--profile minio s3 ls s3://hoge
2019-02-18 11:15:58 365 docker-compose.yml
ブラウザで確認してもオブジェクトがPUTされていることが確認できました。
今回はお試しだったので、コンテナ内にファイルが保存されるようにしたままなので、コンテナを削除すると保存しているファイルも消えてしまうので、必要に応じでホスト側にファイルが保持されるようにしてください。
まとめ
ローカルでの開発でS3が必要な場合、Dockerで環境構築することができるならば、利用しやすいツールだと思います。
参考
Minio: Private cloud storage
https://www.minio.io/
S3 互換のシンプルなオブジェクトストレージ Minio を使う - Qiita
https://qiita.com/rerofumi/items/21f7a22b8b824859754f
S3互換のオブジェクトストレージminioを試す | DevelopersIO
https://dev.classmethod.jp/tool/s3-compatible-storage-minio/
Minio: Private cloud storage
https://www.minio.io/