본문 바로가기

Solution Architecture/Infra

[Docker] MLflow with Docker

Docker란?

  • Docker는 개발자가 컨테이너를 빌드, 배포, 실행, 업데이트, 관리할 수 있는 오픈 소스 플랫폼
  • 작업하는 동안 컨테이너를 쉽게 공유하고 모든 참여자가 동일한 환경에서 작업
  • 컨테이너의 수명 주기를 관리하기 위한 도구와 플랫폼을 제공하여 애플리케이션의 배포와 관리를 용이하게 함

docker는 가상머신과 달리 커널을 공유해서 사용함


docker client : 도커 사용자가 도커와 소통하는 기본적인 방법
docker_host : 도커가 띄워진 서버이며, 컨테이너와 이미지를 관리함
docker daemon : 도커 엔진이며 도커의 api 요청을 듣고 이미지, 컨테이너, 네트워크 등 도커의 객체를 관리함
docker registry: 도커 이미지 저장소이며 docker pull 또는 docker run 명령어를 사용하면 구성된 레지스트리에서 필요한 이미지를 가져옴
docker image : Docker Image를 docker run 명령어를 실행시키면 Docker Container 시킬 수 있으며 다른사람과 공유가 가능
docker container : Docker API 또는 CLI를 통해 컨테이너를 생성, 시작, 중지, 이동, 삭제할 수 있으며 호스트와 다른 컨테이너로부터 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간(프로세스)이 생성됨


Mlflow docker image

  1. cloud9 ide에서 dockerfile 생성
# Use a base image with the desired Python version
FROM python:3.8

# Set the working directory inside the container
WORKDIR /app

# Install MLflow and any additional dependencies
RUN pip install mlflow==2.5.0

# Expose the default MLflow port (change it if needed)
EXPOSE 5000

# Set the default command to run MLflow server
CMD ["mlflow", "server", "--host", "0.0.0.0"]
  1. Docker 이미지를 빌드
docker build -t mlflow-image .
  1. docker images 확인

  1. mlflow Repository 생성
  2. push command로 aws cli login
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin {user_id}.dkr.ecr.{resion}.amazonaws.com
  1. 도커 이미지를 빌드
docker build -t mlflow .
  1. 빌드가 완료되면 이미지에 태그를 지정하여 이 리포지토리에 푸시할 수 있습니다
docker tag mlflow:latest {user_id}.dkr.ecr.{resion}.amazonaws.com/mlflow:latest
  1. 이미지를 새로 생성한 AWS 리포지토리로 푸시합니다.
docker push {user_id}.dkr.ecr.{resion}.amazonaws.com/mlflow:latest

ECR에 있는 image Pull

docker pull {user_id}.dkr.ecr.{resion}.amazonaws.com/mlflow:latest

image Delete

aws ecr batch-delete-image --repository-name mlflow --image-ids imageTag=latest

 

CMD / Entrypoint

CMD Entrypoint
docker run 명령 내에 명시된 매개변수가 있는 경우 Daemon에서 무시 명령어는 무시되지 않고 대신 명령의 인수로 취급하여 매개변수로 추가
사용자가 CLI에 인자를 입력하지 않을 때 실행할 기본 프로그램을 지정하는 것 컨테이너가 시작될 때 필수적으로 특정 명령을 실행해야 하는 경우

참고링크

반응형