이전 포스트 LLama 모델 다운받기에서 모델을 USB로 다운받기를 완료했으니 이제 다운로드 받은 모델을 도커 컨테이너에 마운트하여 빌드하는 과정을 수행하자.
1) USBIPD-WIN 설치
https://learn.microsoft.com/ko-kr/windows/wsl/connect-usb#install-the-usbipd-win-project


설치 명령어는 그냥 *.msi파일을 다운받아도 되지만 예의상
PowerShell 명령어로 진행하자
winget install --interactive --exact dorssel.usbipd-win
설치를 다 하면 위 사진처럼 usbipd설치 파일이 자동수행된다.
2) 목표 USB 도커 엔진과공유하기
usbipd를 설치한 후 재부팅 Powershell로 연뎔된 장치리스트 확인을 수행하자
usbipd list

여러개의 장치리스트가 뜨는데 필자는 4-2항목의 USB를 도커 데스크탑에 공유 디바이스가 되게끔 해야한다.
이를 위해서는 PowerShell을 관리자권한으로 다시 실행 후 아래의 명령어를 수행하자
# 공유할 USB디바이스를 강제로 공유되게 만듬
usbipd bind --busid [공유할 USB] --force
# 공유할 USB를 강제로 wsl 도커 데스크탑에 붙임
usbipd attach --wsl --busid [공유할 USB]
이게 수행이 안되면 재부팅 -> 다시 관리자권한 PowerShell 실행
후 반복하면 언젠가는 붙게 된다.

도커 데스크탑에 정상적으로 USB가 붙었는지 확인하려면
PowerShell창을 하나 더 열고
아래의 명령어를 순차로 실행하자
wsl #도커 데스크탑의 WSL2 배포판 환경에 진입
lsusb #도커 Enviroment에 Attach한 USB가 보이는지 확인하기

음...
이게 아닌거 같다 attach하니까 오히려 도커 Enviroment에서 파일 리스트를 확인 못한다...

참고로 Attach된 USB 디바이스를 정상화 하는 명령어는 아래와 같다.
# Attach된 디바이스를 Detach
usbipd detach --busid [Attach된 USB디바이스]
# Shared상태의 디바이스를 공유 중지
usbipd unbind --busid [Shared중인 USB 디바이스]
https://docs.docker.com/engine/storage/volumes/
docker 공식문서에서는 괜히 뻘짓거리 하지말고 볼륨 만들어서 쓰라고 나와있다...


문서에서도 제발 USB마운트 같은 뻘짓거리 하지말라고 썼네...
먼저 문서에 나와있는 데로 차근차근 따라해보자
볼륨 생성하기
# 도커, 볼륨, create, [볼륨명]
docker volume create model_volume
# 생성한 볼륨 목록 확인
docker volume ls

생성한 볼륨에 직접 엑세스를 OS상에서도 가능한 것으로 보이긴 하지만
1) 임시 우분투 컨테이너를 만들고
2) 임시 우분투 컨테이너에 USB파일을 복사한 뒤
3) 임시 우분투 컨테이너 -> 도커 볼륨으로 파일 복사
4) 임시 우분투 컨테이너는 폐기
이 순으로 진행하는걸 권장하는 듯 하다.
1) 임시 우분투 컨테이너 만들기
docker run --name temp_ubuntu_container -it -v model_volume:/app/models ubuntu

임시 우분투 컨테이너가 만들어지면 바로 해당 컨테이너로 진입하기에 일단 켜두기만 하자
2) 임시 우분투 컨테이너에 USB파일을 복사

위 사진처럼
docker cp [호스트PC의 경로] [컨테이너의 경로]
이걸 6번 반복 타이핑 해야 한다.
이유가

그냥 USB에서 dir 명령어를 치면 보이지 않던
$RECYCLE.BIN파일이 USB 내에 상주하는데
이 파일이 접근권한이 막혀있어서 Access dinied 메세지가 뜨고
복사가 안된다.
그래서 노가다를 좀 해야한다.
복사 수행이 잘 된것 같으면
임시 우분투 컨테이너 상에서 파일 목록을 확인하자
ls -lh [임시 컨테이너의 복사 경로]

'$RECYCLE.BIN' 파일이 왜 끼어있는지는 모르겠지만
삭제를 해주자
cd /app/source_models
rm -rf '$RECYCLE.BIN'

3) 임시 우분투 컨테이너 -> 도커 볼륨으로 파일 복사
# 임시 컨테이너에서 도커 볼륨으로 파일 복사
cp -r /app/source_models/* /app/models/

뭔가 CLI 명령어로는 volume 파일 내 목록을 확인하는건 안되는것 같고 윈도우 기반이니까 Docker Desktop GUI 프로그램으로 확인하는게 나은 듯 하다.
4) 임시 우분투 컨테이너는 폐기
# 임시 우분투 컨테이너 정지
docker stop temp_ubuntu_container
# 임시 우분투 컨테이너 삭제
docker rm temp_ubuntu_container


컨테이너를 폐기했더라도 volume으로 복사한 데이터(Model file)은 온전하게 보존된 것을 확인할 수 있다.
이제 이 volume을 이미지 빌드 및 컨테이너 등록시 활용하여 ollama 모델 리스트에 등록하는 과정을 수행해보자