본문으로 건너뛰기

학습 이미지 업로드: Docker 방식

Dockerfile을 직접 작성하고 Docker 명령어로 이미지를 빌드하여 Harbor registry에 업로드하는 과정을 안내합니다.

더 간단한 방법

Dockerfile 작성 없이 빠르게 시작하고 싶으시다면 학습 이미지 업로드: CLI 방식을 사용하세요. CLI가 Dockerfile 자동 생성부터 빌드, 업로드까지 모두 처리합니다.

이 페이지는 Dockerfile을 직접 작성하여 Docker 이미지를 완전히 제어하고 싶은 고급 사용자를 위한 가이드입니다.

사전 요구사항

  • Docker가 설치되어 있어야 합니다
  • Harbor 계정이 있어야 합니다 (관리자에게 요청)
  • KeyNet Platform에서 프로젝트가 생성되어 있어야 합니다
  • Dockerfile이 준비되어 있어야 합니다

0. Dockerfile 작성

먼저 학습용 Dockerfile을 작성해야 합니다.

기본 예시

FROM pytorch/pytorch:2.8.0-cuda12.9-cudnn9-runtime

WORKDIR /app

# requirements 복사 및 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 학습 코드 복사
COPY train.py .

# 컨테이너 실행 시 학습 시작
ENTRYPOINT ["python", "train.py"]

자세한 가이드

Dockerfile 작성 방법, 베이스 이미지 선택, 의존성 관리, 레이어 캐싱 등에 대한 자세한 내용은 Docker 이미지 가이드를 참고하세요.

1. Harbor 로그인

Docker 이미지를 push하기 위해 Harbor에 로그인합니다.

docker login harbor.aiplatform.re.kr

인증 정보 입력:

Username: <관리자에게 발급받은 계정>
Password: <관리자에게 발급받은 비밀번호>

로그인 성공

Login Succeeded

Harbor 도메인

Harbor 도메인

현재 Harbor 도메인은 harbor.aiplatform.re.kr입니다. 이 도메인은 변경될 수 있으므로, 최신 도메인은 관리자에게 확인하세요.

2. Repository Key 발급

Platform의 모델 생성 화면에서 Harbor push용 repository 주소를 확인합니다.

Repository Key

발급 예시:

harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest
중요

이 repository 주소는 모델마다 고유하게 생성됩니다. 반드시 이 주소로 이미지를 빌드하고 push해야 합니다.

Repository 주소 구조

harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest
└─────┬────┘ └─────────┬─────────┘ └─┬─┘
Project Repository Tag
  • Project: Platform 프로젝트 (고정: kitech-model)
  • Repository: 모델마다 고유한 식별자
  • Tag: 이미지 버전 (일반적으로 latest)

3. 이미지 빌드

발급받은 repository 주소로 이미지를 빌드합니다.

기본 빌드

# Platform에서 발급받은 repository로 빌드
docker build -t harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest .

플랫폼 지정 (M1/M2 Mac)

M1/M2 Mac에서 빌드하는 경우 반드시 플랫폼을 지정해야 합니다:

docker build --platform linux/amd64 -t harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest .
M1/M2 Mac 사용자

Platform은 Ubuntu (linux/amd64) 환경에서 실행됩니다. --platform linux/amd64 옵션을 빠뜨리면 이미지가 Platform에서 실행되지 않습니다.

빌드 옵션 설명

docker build [옵션] <컨텍스트>

필수 인자:

인자설명
컨텍스트빌드에 사용할 파일들이 있는 디렉토리 (.은 현재 디렉토리)

주요 옵션:

옵션설명
-t, --tag이미지 이름과 태그 (필수)
--platform대상 플랫폼 지정 (M1/M2 Mac에서 필수)
-f, --fileDockerfile 경로 (기본: ./Dockerfile)
빌드 컨텍스트

빌드 컨텍스트(.)는 Docker가 이미지 빌드 시 접근할 수 있는 파일 범위를 결정합니다. .dockerignore 파일로 불필요한 파일을 제외할 수 있습니다.

빌드 확인

빌드가 완료되면 이미지 목록에서 확인합니다:

docker images | grep orabz434x6oynnq2ls0y6

출력 예시:

REPOSITORY                                                       TAG       IMAGE ID       CREATED         SIZE
harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6 latest ac7910fd9ab7 5 minutes ago 8.5GB

빌드 시간 단축

빌드 시간을 단축하려면:

  1. .dockerignore 사용: 불필요한 파일 제외 (Docker 이미지 가이드 참고)
  2. 레이어 캐싱: requirements.txt를 먼저 복사하여 캐싱 활용
  3. 멀티스테이지 빌드: 빌드 도구와 런타임 분리

4. 이미지 Push

빌드한 이미지를 Harbor에 업로드합니다:

docker push harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest

Push 진행 상황

The push refers to repository [harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6]
9e7b3cd4ea34: Pushed
7021d1b70935: Pushed
24ac5c944261: Pushed
0e736609e8e5: Pushed
84e69331e841: Pushed
0660c5415297: Pushed
4f4fb700ef54: Mounted from kitech-model/z9pqrfnilwvl5qclmj3yj
a84b49fe85c9: Pushed
f5ea56cf41c2: Pushed
c875434ab033: Pushed
latest: digest: sha256:32e07433676014d7ee963463c6044243d79114ad45771dcc754a325d34d7caca size: 856

Push 완료

Push가 성공하면 Platform에서 자동으로 이미지를 감지합니다.

업로드된 모델 확인

자동 감지

Platform은 Harbor를 주기적으로 모니터링하여 새로운 이미지를 자동으로 감지합니다. 몇 초에서 최대 1분 정도 소요될 수 있습니다.

로컬 테스트 (선택사항)

Platform에 push하기 전에 로컬에서 이미지를 테스트할 수 있습니다.

사전 요구사항

로컬 테스트를 위해서는 로컬 실험 환경이 구성되어 있어야 합니다. 특히 MLflow 연동 테스트를 하려면 MLflow 서버가 실행 중이어야 합니다.

기본 실행

docker run --rm harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest

GPU 사용

docker run --rm --gpus all harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest

Hyperparameter 전달

docker run --rm harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest --batch-size 32 --epochs 10

MLflow 연동 테스트

로컬 MLflow 서버와 연동하여 테스트합니다.

MLflow 서버 실행 확인:

# MLflow 서버가 실행 중인지 확인
curl http://localhost:5000/health

Docker 컨테이너에서 MLflow 접근:

# --network host로 로컬 MLflow 서버에 접근
docker run --rm --network host harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest

문제 해결

Harbor 로그인 실패

증상:

Error response from daemon: Get "https://harbor.aiplatform.re.kr/v2/": unauthorized

해결:

  1. Harbor 도메인 확인
  2. 계정 및 비밀번호 재확인
  3. 관리자에게 계정 활성화 상태 확인

Push 권한 오류

증상:

denied: requested access to the resource is denied

해결:

  1. Harbor 로그인 상태 확인:

    docker login harbor.aiplatform.re.kr
  2. 계정에 push 권한이 있는지 관리자에게 확인

  3. Repository 주소가 Platform에서 발급받은 것과 정확히 일치하는지 확인

Platform 실행 오류

증상:

exec /usr/bin/python: exec format error

원인:

M1/M2 Mac에서 --platform linux/amd64 옵션 없이 빌드한 경우

해결:

# 올바르게 다시 빌드
docker build --platform linux/amd64 -t harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest .

# 다시 Push
docker push harbor.aiplatform.re.kr/kitech-model/orabz434x6oynnq2ls0y6:latest

대안: CLI로 빌드 (고급)

Dockerfile은 직접 작성하되 빌드와 push는 CLI로 자동화할 수도 있습니다:

# keynet-train CLI 사용 (0.8.5 권장, 0.7.4 이상 호환)
keynet login https://gateway.aiplatform.re.kr
keynet-train push train.py --dockerfile ./Dockerfile

이 방법의 장점:

  • Dockerfile 작성: 직접 제어 (멀티스테이지 빌드, 레이어 최적화 등)
  • Harbor 로그인, 빌드, push: CLI가 자동 처리
  • Repository key 발급: CLI가 자동 처리

다음 단계

이미지 push가 완료되었다면:

  1. Hyperparameter 설정: Platform에서 hyperparameter 등록
  2. MNIST 튜토리얼: 전체 워크플로우 예시
  3. YOLO 튜토리얼: 커스텀 데이터셋 사용 예시