MinIOオブジェクトストレージとmcクライアントを動かしてみる
はじめに
S3みたいなオブジェクトストレージで、ローカルで動かせるものが、なにかないか探しているときに、Minioというのがあることを教えてもらって、ちょっとインストールして、画像ファイルがダウンロードできるようになるまでやってみようと思います。
あと少しだけmc
クライアントも使ってみたいと思います。
インストールはDokcerを用いてやろうと思います。
動かしてみる
環境
$ uname -srvmpio Linux 5.4.0-65-generic #73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal $ docker version Client: Docker Engine - Community Version: 20.10.3 API version: 1.41 Go version: go1.13.15 Git commit: 48d30b5 Built: Fri Jan 29 14:33:21 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.3 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: 46229ca Built: Fri Jan 29 14:31:32 2021 OS/Arch: linux/amd64 Experimental: true containerd: Version: 1.4.3 GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.19.0 GitCommit: de40ad0
MinIOサーバを動かしてみる
メディアを用意しておく
初期データとして置いておくメディアファイルを置いておきます。
${YOUR_PROJECT_PATH}/media/images
を作成して、適当な画像(01.png
)を置いておきます。
今回は以下の画像を置いておきます。
$ cd ${YOUR_PROJECT_PATH}/media $ ls
Serverのインストール
前述の通り、Dockerで
以下のコマンドでDocker上で動かすことができます。
$ docker run -v ${pwd}/media:/data -p 9000:9000 minio/minio:RELEASE.2021-02-11T08-23-43Z.hotfix.b3c56b53f server /data Endpoint: http://172.17.0.2:9000 http://127.0.0.1:9000 Browser Access: http://172.17.0.2:9000 http://127.0.0.1:9000 Object API (Amazon S3 compatible): Go: https://docs.min.io/docs/golang-client-quickstart-guide Java: https://docs.min.io/docs/java-client-quickstart-guide Python: https://docs.min.io/docs/python-client-quickstart-guide JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD'
ここで、-v ${YOUR_PROJECT_PATH}/media:/data
で先程画像を配置して置いたディレクトリをコンテナの/data
にマウントしておきます。
ここでマウントされたディレクトリに、設定ファイルも含めたMinIOの諸々が保存されることになります。また、${YOUR_PROJECT_PATH}/media
の配下に作成したimages
が作成されるバケット名となります。
また、ログに出力されている通り、デフォルトでのroot
クレデンシャルは、minioadmin:minadmin
になります。この値はそれぞれMINIO_ROOT_USER
、MINIO_ROOT_PASSWORD
の環境変数から変更することができます。
UIを開いてバケットを確認 & ポリシーの変更
起動までできたので早速UIを開いて見たいと思います。
以下のURLからアクセスできます。
ここのAccess Key
とSercret Key
はそれぞれデフォルト値であるminioadmin
を入力します。
すると以下のようながめに遷移します。
画面からわかるとおりすでにimages
というバケットが作成されています。
このバケットのポリシーを変更しておきます。
サイドメニューのimages
にマウスオーバーすると三点リーダのようなものが表示されるのでそこをクリックすると以下のような選択肢が開かれるので、
Edit policy
を選択肢ます。
そして以下のようなポリシーを追加するためのダイアログが 表示されるので、今回はそのままAdd
ボタンを押します。
これで、サーバの準備は完了です。
cURLデータを取得する
サーバの準備はできたので取得してみようと思います。
以下のコマンドを叩きます。
$ curl localhost:9000/images/01.png --output 01.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 18968 100 18968 0 0 18.0M 0 --:--:-- --:--:-- --:--:-- 18.0M $ ll 合計 80 drwxr-xr-x 2 yuya-hirooka docker 4096 2月 12 21:12 ./ drwxrwxrwt 81 root root 53248 2月 12 21:12 ../ -rw-r--r-- 1 yuya-hirooka docker 18968 2月 12 21:12 01.png
mcクライアントを使ってみる
Clientのインストール
MiniIOのクライアントをインストールします。
Dockerを使うことも可能なようですが、今回はバイナリをインストールして利用してみたいと思います。
以下のコマンドを叩きます。
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc $ chmod +x mc $ sudo mv mc /usr/bin/ $ mc --version mc version RELEASE.2021-02-10T07-32-57Z
configエイリアスを登録しておく
ms
ではいくつかのストレージの向き先をエイリアスという形で保存しておくことができます。
新しいエイリアスはmc alias set [ALIAS URL] [ACCESSKEY] [SECRETKEY]
コマンドで追加することができます。
例えば今回作成したサーバのエイリアスを登録しておくには以下のようにコマンドを実行します。
$ mc alias set test http://127.0.0.1:9000 minioadmin minioadmin
登録したエイリアス一覧をみるためにはmc alias ls
コマンドを用いて確認することができます。
$ mc alias ls gcs URL : https://storage.googleapis.com AccessKey : YOUR-ACCESS-KEY-HERE SecretKey : YOUR-SECRET-KEY-HERE API : S3v2 Path : dns local URL : http://localhost:9000 AccessKey : SecretKey : API : Path : auto play URL : https://play.min.io AccessKey : Q3AM3UQ867SPQQA43P2F SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG API : S3v4 Path : auto s3 URL : https://s3.amazonaws.com AccessKey : YOUR-ACCESS-KEY-HERE SecretKey : YOUR-SECRET-KEY-HERE API : S3v4 Path : dns test URL : http://127.0.0.1:9000 AccessKey : minioadmin SecretKey : minioadmin API : s3v4 Path : auto
バケットを作成して、ファイルをアップロードしてみる
バケットを作成するにはmc mb [FLAGS] TARGET [TARGET...]
のコマンドを利用することで行えます。
$ mc mb test/image-01
次に、作成したバケットにイメージをアップロードします。
mc cp [FLAGS] SOURCE [SOURCE...] TARGET
で行なうことができます。
作成したバケットに01.png
をアップロードするには以下のコマンドで行なうことができます。
$ mc mv 01.png test/image-01
UIを確認するとバケットが作成されファイルがアップロードされているのが確認できます。
mcコマンドで出来ることをざっくりまとめておく
最後にmcコマンドで行えることをまとめておきます。
mcコマンドは第一の引数でざっくりと行なうことが決定されます。
例えばバケットを作成して、ファイルをアップロードしてみる
では、mb
とmv
を使いました。
その他にも以下のようなコマンドがあります。
コマンド | 説明 |
---|---|
alias | コンフィグファイルを設定したり削除したりする |
ls | バケットやオブジェクトの一覧を表示する |
mb | バケットを作成する |
rb | バケットを削除する |
cp | オブジェクトをコピーする |
mirror | リモートサイトにオブジェクトをシンクロナイズする |
cat | オブジェクトのコンテンツを表示する |
head | オブジェクトの最初のn行を表示する |
pipe | 標準入力からの入力ストリームをオブジェクトに変換する |
share | 一時的にオブジェクトにアクセスできるようになるURLを生成する |
find | オブジェクトを検索する |
sql | オブジェクトに対してsqlクエリを発行する |
stat | オブジェクトのメタデータを表示 |
mv | オブジェクトを移動させる |
tree | treeフォーマットでオブジェクトを表示する |
du | ディスクの使用量を再帰的にサマライズする |
retention | オブジェクトの保持期間を設定する |
legalhold | リーガルホールドをマネージする |
diff | 2つのオブジェクトの名前、サイズ、データなどのdiffを表示 |
rm | オブジェクトを削除する |
version | バケットのバージョニングをマネージする |
ilm | バケットのライフサイクルをマネージする |
encrypt | バケットの暗号化の設定をマネージする |
event | オブジェクトの通知をマネージします |
watch | オブジェクトの通知イベントを監視する |
undo | PUT/DELETE オペレーションをundoする |
policy | アノニマスユーザのバケットに対するアクセスポリシーを変更する |
tag | バケットとオブジェクトのタグをマネージする |
replicate | サーバーサイドのバケットのレプリケーションを設定する |
admin | MinIOサーバーをマネージする |
update | mcコマンドを最新のリリースにバージョンアップする |