LoginSignup
1
0

More than 1 year has passed since last update.

【Laradockバージョン】docker-composeでMinio起動時にデフォルトのバケットを作成する

Posted at

現在業務で、WEBサイトの作成・改修を行なっています。
Minioを利用して、画像のダウンロード・アップロード処理を行なっています。
複数のバケットを使用しているので、docker-compose upの時に
バケットを、さくっと一括作成できればと考えました。

こちらの記事で、既に同じ内容が投稿されていたのですが、Laradock
docker-compose.ymlファイルで試したところ、うまくいかなかったのでこの記事を書きました。

minioの設定

・アクセスキー:Accesskey
・シークレットキー:Secretkey
・バケット名:firstbucket

今回は、上記の設定で進めていきます。
アクセスキー・シークレットキー・バケット名に決まりはありません。
ご自身の好きな文字列に置き換えてください。

docker-compose.yml(初期値)

Minioの初期値は以下のようになっています。
environmentの下に、任意のアクセスキーとシークレットキーを設定してください。

しかし、このままだと、Minioを起動することしかできません。
新しくバケット作成を行うServiceを定義する必要があります。

docker-compose.yml
 ### Minio ################################################
     minio:
       build: ./minio
       volumes:
         - ${DATA_PATH_HOST}/minio/data:/export
         - ${DATA_PATH_HOST}/minio/config:/root/.minio
       ports:
         - "${MINIO_PORT}:9000"
       environment:
         - MINIO_ACCESS_KEY=Accesskey
         - MINIO_SECRET_KEY=Secretkey
       networks:
         - frontend
         - backend

docker-compose.yml(Bucket作成)

それでは、バケット作成用のServiceを、上記のymlファイルに組み込んでいきましょう。
今回、Service名をcreateBucketsとします。(ここも任意の文字列で大丈夫です)

docker-compose.yml
 minio:
  ーーー省略ーーー
 createbuckets:
    image: minio/mc:latest
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      until (/usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4) do echo '...waiting...' && sleep 1; done;
      /usr/bin/mc admin info myminio;
      /usr/bin/mc mb myminio/firstbucket;
      /usr/bin/mc policy set download myminio/firstbucket
      exit 0;
      "

docker-compose up 実行結果

docker-compose up createbucketsを入力して、
下記のような出力が出ると成功です。

docker-compose_up_実行
$ docker-compose up createbuckets

laradock_minio_1 is up-to-date

Recreating laradock_createbuckets_1 ... done

Attaching to laradock_createbuckets_1
createbuckets_1        | Added `myminio` successfully.
createbuckets_1        | ●  host.docker.internal:9000
createbuckets_1        |    Uptime: 2 minutes 
createbuckets_1        |    Version: 2021-04-22T15:44:28Z
createbuckets_1        |    Network: 1/1 OK 
createbuckets_1        | 
createbuckets_1        | 54 KiB Used, 8 Buckets, 5 Objects
createbuckets_1        | Bucket created successfully `myminio/firstbucket`.
createbuckets_1        | Access permission for `myminio/firstbucket` is set to `download`
laradock_createbuckets_1 exited with code 0

http://localhost:9000にアクセスし、設定したアクセスキー・シークレットキーを使用して
ログインするとバケットが作成されているのが確認できます。

解説

ここからは、createbucketsの内容を1行ずつ見ていきます。

Service
createbuckets:

ここは、docker-compose upの後に指定するサービス名です。
特に、決まりはないので、わかりやすく重複していない名前にしてください。


image
image: minio/mc:latest

ここでは、最新のMinio Clientのイメージを指定しています。


depends_on
depends_on:
  - minio

depends_onは、コンテナを起動させる順番を決めるものです。
①minio ②createbucketsの順番で起動するように設定しています。
今回のcreatebucketsのサービスは、Minioにバケットを作成するものなので、
このサービスが動く前に、Minioが起動している必要があります。
従って、このdepends_onが必要になってきます。

しかし、この記事によると、保証してくれるのは起動の順番だけで、
起動が完了しているかどうかは、保証してくれないそうです。。


entrypoint
    entrypoint: >
      /bin/sh -c "
      until (/usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4) do echo '...waiting...' && sleep 1; done;
      /usr/bin/mc admin info myminio;
      /usr/bin/mc mb myminio/firstbucket;
      /usr/bin/mc policy set download myminio/firstbucket;
      exit 0;
      "
  • 1行目 /bin/sh -c では、その後にコマンドを入力することを定義しています。

  • 2行目前半 until (/usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4) 
     ・ until()
      ・ カッコ内の条件が真になるまで繰り返し実行される制御文です。(minioの起動を待つためです/起動していないと失敗してしまうので。)
     ・ /usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4
      ・ 使用しているminioの情報(アクセスキー、シークレットキー、URL)myminioという名前でエイリアス登録しています。

  • 2行目後半 do echo '...waiting...' && sleep 1; done;
     ・...waiting...の文字列表示します。
     ・1秒間の待機時間を設けています。(minioの起動を待つため)

  • 3行目 /usr/bin/mc admin info myminio;
     ・先ほど2行目前半で登録したエイリアス(myminio)の情報を表示できます。

  • 4行目 /usr/bin/mc mb myminio/firstbucket;
     ・バケットを作成するコマンドです。
     ・mbはおそらく、make bucketの略語かな・・?
     ・登録したエイリアス名/作成したいバケット名を指定してください。
     ・複数のバケットを作りたい場合は、この行を複数記述してください。

  • 5行目 /usr/bin/mc policy set download myminio/firstBucket;
     ・既存のバケットにポリシーを設定できます。
     ・今回は、downloadを指定しているので、ダウンロードだけを許可する設定にしています。
     ・個人のニーズに応じて、複数記述したり、色々と変更してみてください。(使用可能なオプション:[none, download, upload, public])

  • 6行目 exit 0;
     ・サービスを終了させるコードです。


間違っている情報、うまく動かないなどありましたら、ぜひコメント欄にて教えてください。
最後まで、お読みいただきありがとうございました。

参考

docker-composeでMinio起動時にデフォルトのbucketを作成する -Qiita-
docker-compose depends_onとlinksの違い -Qiita-
MinIO Client Complete Guide
Laradock
minio/mc -Github-

1
0
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
1
0