1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker x MinIO 環境構築

Last updated at Posted at 2025-02-06

概要

MinIO で sample-bucket バケットが存在しない場合に自動作成する仕組み を実装した。
当初、MinIO 起動直後に初期化用の mc コマンドを実行すると connection refused エラーが発生していたが、ヘルスチェックdepends_on の condition: service_healthy を活用することで解決した。

Docker Compose の構成

以下が最終的な docker-compose.yml の内容である。

version: '3.8'
services:
  minio:
    image: minio/minio:latest
    container_name: minio
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123
    command: server /data --console-address ":9001"
    # ヘルスチェックの設定 (例)
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"]
      interval: 5s
      timeout: 2s
      retries: 5
    restart: unless-stopped

  minio-init:
    image: minio/mc
    depends_on:
      # minio が "healthy" になるまで minio-init の起動を待機
      minio:
        condition: service_healthy
    entrypoint: /bin/sh
    command: >
      -c "
      mc config host add local http://minio:9000 minio minio123 &&
      if mc ls local/sample-bucket; then
        echo 'Bucket sample-bucket already exists.'
      else
        echo 'Bucket sample-bucket not found. Creating...'
        mc mb local/sample-bucket
      fi
      "

volumes:
  minio-data:

ポイント解説

1. MinIO のヘルスチェック設定

MinIO コンテナに以下のヘルスチェック設定を追加することで、コンテナが本当にリクエストを受け付け可能な状態になっているかどうかを判定している。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"]
  interval: 5s
  timeout: 2s
  retries: 5

この設定により、MinIO が起動してからヘルスチェックで OK と判断されるまで、依存関係のあるサービス(今回の場合は minio-init)は実行を待機することができる。

2. minio-init サービスでのバケット自動作成

minio-init サービスでは、MinIO Client (mc) を用いて、以下の手順でバケットの存在確認と作成を行っている。

  • ホストの登録:
    mc config host add local http://minio:9000 minio minio123
    これにより、local というエイリアスで MinIO サーバーに接続できるように設定する。

  • バケットの存在確認と作成:

    if mc ls local/sample-bucket; then
      echo 'Bucket sample-bucket already exists.'
    else
      echo 'Bucket sample-bucket not found. Creating...'
      mc mb local/sample-bucket
    fi
    

    ここで、既に sample-bucket バケットが存在する場合はその旨を表示し、存在しなければ mc mb コマンドで新規作成するように設定している。

3. depends_on と condition: service_healthy の活用

minio-init サービスは、depends_on において以下のように設定している。

depends_on:
  minio:
    condition: service_healthy

これにより、MinIO コンテナのヘルスチェックが成功(healthy 状態)するまで minio-init は起動しないため、MinIO が完全に起動しないうちに接続しようとして connection refused エラーが発生することを防いでいる。

まとめ

今回の実装では、Docker Compose の ヘルスチェック 機能と depends_on: condition: service_healthy を活用することで、MinIO の起動タイミングを適切に待機し、初期化スクリプトが正常に実行できるようにした。
本当は、アクセスポリシーをパブリックに設定したかったが、うまくいかず、その部分は手動で行うことにした。今後解決できたらこうしんしようとおも

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?