리셋 되지 말자

Minio 사용해보기 본문

Docker

Minio 사용해보기

kyeongjun-dev 2024. 2. 25. 17:52

개요

python 컨테이너와 minio 컨테이너를 docekr compose로 생성하고, 간단한 파일을 업로드 해봅니다

docker compose 작성

python, minio 컨테이너를 생성합니다

version: "3"
services:
  python:
    image: python:3.10-slim
    command: sleep infinity

  minio:
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    volumes:
      - minio_volume:/data
    environment:
      - MINIO_ROOT_USER=minioroot
      - MINIO_ROOT_PASSWORD=minioroot
    ports:
      - "9000:9000"
      - "9001:9001"

volumes:
  minio_volume:

# docker-compose up

 

실행 후, localhost:9001 minio 콘솔에 접속 후, docker-compose.yml에 지정한 minioroot, minioroot로 로그인 합니다

 

Access Keys 탭에서 Create access key로 생성합니다

 

Expiry, Name 등 정보는 기입 안해도 됩니다

 

bucket 탭에서 'test' 이름의 버킷도 생성해줍니다

 

python 컨테이너에 접속합니다

$ docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                              NAMES
cc0047afde5f   minio/minio:latest   "/usr/bin/docker-ent…"   18 minutes ago   Up 18 minutes   0.0.0.0:9000-9001->9000-9001/tcp   minio-minio-1
bcef024fc019   python:3.10-slim     "sleep infinity"         18 minutes ago   Up 18 minutes                                      minio-python-1

$ docker exec -it bcef024fc019 bash
root@bcef024fc019:/#

 

boto3를 설치하고, vim도 설치합니다

root@bcef024fc019:/# mkdir app
root@bcef024fc019:/# cd app
root@bcef024fc019:/app# pip install boto3
root@bcef024fc019:/app# apt update -y && apt install -y vim

 

minio에서 생성한 키를 환경변수로 설정합니다

root@bcef024fc019:/app# export AWS_ACCESS_KEY_ID=BehWjSHZ6CyrZNIb9fq7
root@bcef024fc019:/app# export AWS_SECRET_ACCESS_KEY=8IZWzIRjj6dzuEvwJYVt8htsio3irt5yconyxNd8

 

업로드할 파일을 임시로 생성합니다

root@bcef024fc019:/app# echo 123 > tmp.txt
root@bcef024fc019:/app# cat tmp.txt 
123

 

아래 파일을 python 컨테이너에서 생성 후, 실행하여  'test' 버킷에 tmp.txt 파일을 업로드 해봅니다

import boto3

# MinIO 서버의 엔드포인트, 액세스 키 및 시크릿 키 설정
minio_endpoint = 'http://minio:9000'

# boto3를 사용하여 MinIO 클라이언트 생성
minio_client = boto3.client('s3',
                            endpoint_url=minio_endpoint,
                            config=boto3.session.Config(signature_version='s3v4'))

# 업로드할 파일과 버킷 이름 설정
file_path = 'tmp.txt'
bucket_name = 'test'
object_name = 'tmp.txt'

# 파일 업로드
with open(file_path, 'rb') as file_data:
    minio_client.put_object(Bucket=bucket_name, Key=object_name, Body=file_data)

print(f"File uploaded to MinIO: {object_name}")

 

결과는 아래와 같습니다

 

object_name에 디렉토리를 추가하면 (tmp.txt -> /dir/tmp.txt) 아래와 같이 디렉토리가 생성되며 파일이 업로드 됩니다

Comments