728x90

Streamlit App Dockerize

Streamlit App은 다양한 클라우드 플랫폼(AWS, GCP, Google 등)에 배포가 가능하며, 앱을 컨테이너화 하여 여러 클라우드 플랫폼에 배포할 수 있다.

Prerequisites

실행할 App을 다운로드 합니다.
소스는 Streamlit에서 제공하는 샘플 Repository를 활용합니다.

git clone https://github.com/streamlit/streamlit-example.git .

Dockerfile 만들기

# Base 이미지
FROM python:3.12-slim

# 2. 작업 디렉토리를 /app으로 설정
WORKDIR /app

# 3. 현재 디렉토리의 requirements.txt 파일을 컨테이너의 /app으로 복사
COPY requirements.txt /app/

# 4. requirements.txt에 명시된 패키지 설치
RUN pip3 install -r requirements.txt

# 5. 실행할 streamlit_app.py를 컨테이너 /app으로 복사
COPY streamlit_app.py /app/

# 6. 컨테이너가 수신할 포트 오픈
EXPOSE 8501

# 7. 컨테이너 헬스 체크
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health

#8. 실행될 컨테이너 구성
ENTRYPOINT [ "streamlit", "run", "streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0" ]

Streamlit 버전 1.10.0 이상에서는 Streamlit 앱을 Linux 배포판의 루트 디렉터리에서 실행할 수 없습니다. 따라서 WORKDIR은 루트가 아닌 별도 디렉토리를지정해야 합니다. (예. /app)
(참고) github Issue:5239

Docker image 빌드

생성한 Dockerfilestreamlit 이미지 이름으로 빌드합니다.

docker build -t streamlit .

docker images 로 생성된 이미지 를 확인합니다.

REPOSITORY  TAG       IMAGE ID       CREATED         SIZE
streamlit   latest    bb9ac485406e   2 minutes ago   634MB

Docker 컨테이너 실행

컨테이너의 포트 8501을 서버의 8501 포트에 게시합니다.

docker run -p 8501:8501 streamlit

출력된 URL로 접속합니다.

Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.

  You can now view your Streamlit app in your browser.

  URL: http://0.0.0.0:8501

(결과)


Reference

728x90
반응형

+ Recent posts