S3과 동등한 기능을 가진 MinIO 사용 방법 docker-compose 사용

9398 단어 도커S3

개요



여러 장소의 사정(계약 문제나 예산 등)에서 AWS 서비스를 사용할 수 없는 상황에서도 개발하기 위해 docker에서 사용할 수 있도록 해 보았습니다.
타이틀은 MinIO이지만 그 밖에 DynamoDB, MySQL도 사용할 수 있도록 하고 있습니다.

사전 준비


  • docker를 먼저 도입합니다. windows Home의 경우 Docker Quickstart Terminal을 사용합니다.
  • 앱은 파이썬을 사용하기 때문에 파이썬 설치 (기사 작성시 3.7입니다).
  • JupyterNotebook등에서도 가능합니다.

  • boto3

  • docker-compose


  • 이번은 docker-compose 로 기동시키기 위한 yml 를 작성합니다.

  • 공식 을 참고로 작성합니다.
  • 그대로는 Invalid command line arguments: use path style endpoint for FS setup. 의 에러가 되어 버렸으므로 여기 를 참고로 수정했습니다.
  • 어디까지나 개발용을 위해 1개만 하고 있습니다만 본래는 4개 node를 사용하는 것 같습니다.

  • MinIO 이외에 MySQL과 DynamoDB도 사용할 수 있도록 하고 있습니다.
  • 최종 파일은 다음과 같습니다.
  • docker-compose.yml
  • version: '3.7'
    services:
      dynamodb-local:
        build: ./dynamodb
        volumes:
          - dynamodb_data:/home/dynamodblocal/data
        ports:
          - 8000:8000
        command: -jar DynamoDBLocal.jar -dbPath ./data
      mysql:
        image: mysql:5.7
        command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
        volumes:
          - db_data:/var/lib/mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 'password'
        ports:
          - 3306:3306
      minio1:
        image: minio/minio:RELEASE.2020-08-27T05-16-20Z
        volumes:
          - data1-1:/data1
          - data1-2:/data2
        ports:
          - "9000:9000"
        environment:
          MINIO_ACCESS_KEY: minio
          MINIO_SECRET_KEY: minio123
        command: server data1
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
          interval: 30s
          timeout: 20s
          retries: 3
    volumes:
      dynamodb_data:
      db_data: {}
      data1-1:
      data1-2:
    
  • DynamoDB Docker 파일
  • FROM amazon/dynamodb-local
    
    WORKDIR /home/dynamodblocal
    
    # UID=1000 → DynamoDB Local の実行ユーザ
    RUN mkdir data && chown -R 1000 data
    
  • 기동하면 아래와 같이 엔드포인트가 표시되어 있으므로 메모등 따로 둡니다.

  • Docker Quickstart Terminal의 경우 IP 주소 부분을 docker 시작 시 표시되는 IP로 읽어 보십시오.

  • minio1_1          | Endpoint:  http://172.20.0.4:9000  http://127.0.0.1:9000
    minio1_1          |
    minio1_1          | Browser Access:
    minio1_1          |    http://172.20.0.4:9000  http://127.0.0.1:9000
    
  • http://192.168.99.100:9000/minio/ (Docker Quickstart Terminal 때문에 IP 주소가 다릅니다)에 액세스 하는 것으로 브라우저상에서 버킷안등을 확인이나 작성등을 실시할 수가 있습니다.

  • S3 기능 구현


  • bucket 작성부터 파일 업로드까지의 소스는 다음과 같습니다.
  • S3에 업로드 할 때 디렉토리 구성을 os.path.join로 만들면 \\로 연결되어 버리므로 replace로 변환하고 있습니다.
  • import boto3
    import os
    from datetime import datetime
    
    endpoint_url = os.getenv('S3_ENDPOINT', 'http://192.168.99.100:9000/')
    aws_access_key_id = os.getenv('S3_ACCESS_KEY_ID', 'minio')
    aws_secret_access_key_id = os.getenv('S3_SECRET_ACCESS_KEY_ID', 'minio123')
    
    s3 = boto3.resource(
        's3',
        aws_access_key_id=aws_access_key_id,
        aws_secret_access_key=aws_secret_access_key_id,
        endpoint_url=endpoint_url
    )
    
    bucket=s3.Bucket('testbukcet')
    bucket.create()
    bucketPath=os.path.join('dir',datetime.now().strftime('%Y%m%d%H%M%S'),'out','test.csv')
    filePath=bucketPath.replace('\\','/')
    bucket.upload_file('test.csv',filePath)
    
    
  • 브라우저에서 확인하면 다음과 같이 확인할 수 있습니다.

  • 좋은 웹페이지 즐겨찾기