share facebook facebook twitter menu hatena pocket slack

2019.03.05 TUE

S3互換のオブジェクトストレージ MinioをDocker Composeで利用する

甲斐 甲

WRITTEN BY 甲斐 甲

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

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 で各ノードの90009001-4に割り当てているので、そちらからアクセスすることができます。

docker-compse.yml を編集して、ノードを1つにしてみます。

docker-compose.yml

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/)](# S3互換のオブジェクトストレージ MinioをDocker Composeで利用する

MinioはAmazon S3互換の分散オブジェクトストレージサーバです。

Minio: Private cloud storage
https://www.minio.io/

元記事はこちら

S3互換のオブジェクトストレージ MinioをDocker Composeで利用する

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。