iNote

생각을 기록하면 오래 남습니다.

AI 어시스턴트

게스트님, 안녕하세요

무엇을 도와드릴까요?

  • 대화 기록이 없어요.

AI 어시스턴트

게스트님, 안녕하세요

무엇을 도와드릴까요?

  • 대화 기록이 없어요.
iNote
iNote
홈할 일일지독서나의 글글쓰기dev-guide

iNote

생각을 기록하면 오래 남습니다.

학습DevOps

Docker에 대해 상세히

서동찬 (sdc337dc@gmail.com)

생성일 : 2026.10.07 15:57 / 수정일 : 2026.10.07 16:05

  • DockerFile은 환경 설정과 서버 코드를 텍스트 레시피처럼 기록해 두면, `docker run` 한 줄로 어느 PC에서도 동일한 컨테이너를 실행할 수 있다.
  • Docker build 시 라이브러리 설치가 일어나 이미지가 만들어지고, 실행 시에는 이미지에서 컨테이너가 생성되어 CMD로 서버가 시작된다.
  • 이미지에는 코드·라이브러리만 담아 가볍게 만들고, 대용량 모델 파일은 볼륨에 분리해 두어 데이터는 별도로 관리한다.
  • 새 PC로 옮길 때는 Docker 설치 → Image 가져오기(또는 Dockerfile로 빌드) → 모델 폴더 준비 → `docker run` 으로 실행하면 된다.

1. 도커가 없을 때 vs 있을 때

  • 도커 없이 KURE를 돌리면, 나의 개인 PC는 아래 일들을 한다.

  1. 파이썬 설치 - 버전 맞추기

  2. pip install torch sentence-transformers fastapi ...

  3. 다른 프로젝트와 라이브러리 버전이 충돌하면 해결작업 진행

  4. 서버 실행

만약 다음달에 PC를 바꾸거나 다른 사람이 실행하려면 이 과정을 다시 해야하고, 그때 버전이 달라서 안될 수 도 있음.

  • 도커를 사용하면 1 ~ 4번을 텍스트 파일(DockerFile)에 기록. 그러면 어느 PC든 "docker run" 한 줄이면 똑같이 동작.

  • 설치 과정이 "사람의 기억"에서 "파일"로 옮겨진 것.

2. DockerFile

  • KURE 서버용이라고 가정할 경우의 모양

# 1. 출발점: Python 3.11이 깔린 깨끗한 리눅스
FROM python:3.11-slim          

# 2. 컨테이너 안에서 /app 폴더에서 작업
WORKDIR /app                   

# 3. 필요한 라이브러리 설치 (이미지를 만들 때 한 번만 실행)
RUN pip install torch sentence-transformers fastapi uvicorn
                               
# 4. 내 PC의 server.py를 컨테이너 안으로 복사
COPY server.py .      

# 5. 컨테이너가 시작되면 이 명령으로 서버 실행         
CMD ["uvicorn", "server:app", "--host", "0.0.0.0"]
  • "깨끗한 PC 한 대를 받아서 → 폴더 만들고 → 설치하고 → 코드 넣고 → 실행 명령 적어둔다" 이 결과물의 Image

3. 유의점

두 개의 시점을 구분하세요

헷갈리기 쉬운 부분이 시점

시점

명령

일어나는 일

빌드 시

docker build

Dockerfile의 RUN들이 실행되어 Image가 만들어짐 (설치는 여기서)

실행 시

docker run

Image로 Container가 만들어지고 CMD가 실행됨 (서버는 여기서 시작)

  • 그래서 라이브러리 설치는 한 번 빌드해 두면 이후 실행은 빠름.


비유 정리

  • DockerFile : 요리 레시피 (텍스트)

  • Image : 레시피대로 만들어 냉동한 밀키트 (한 번 만들어 두면 계속 사용가능)

  • Container : 밀키트를 데워서 실제로 먹는 중인 음식 (실행 중인 프로세스)

  • Volume : 음식이 아니라 냉장고 (음식이 없어져도 재료인 KURE 모델 파일은 거기 남음)


내가 이해에 대한 오답 노트

  • 도커에서 컨테이너가 실행 되면 그 안에서 FastAPI 서버가 실행

  • 도커는 저장소가 아니라 실행 도구. Image는 저장되지만 그건 포장물이고, 서버는 "docker run" 으로 실행해야 살아남

  • KURE 모델은 image에 넣지 않고 볼륨에 따로 둠

  • 하나의 패키지로 만들어 어디든 가져와서 다른 PC에서 꺼내서 사용 가능

  • DOcker는 내가 가진 컴퓨터든 클라우드든 어디서나 같게 돌리는 포장 방식.


  1. KURE는 파일이 커서 Render 무료 플랜에는 올릴 수 없다. (문제 A)

  2. 그래서 내 PC에서 실행하기로 한다. (문제 A의 해결)

  3. 그런데 내 PC에서 실행하려면 Python, torch 등 환경 설정이 번거롭고 PC가 바뀌면 다시 해야 한다. (문제 B)

  4. Docker로 실행 환경과 서버 코드를 패키지(Image) 로 만들어 두면, 어떤 PC에서든 docker run 한 줄로 같은 서버가 뜬다. (문제 B의 해결)


확인 질문

PC를 새것으로 바꿨다고 해봅시다. Docker가 있을 때 무엇을 옮기고 무엇을 새로 다운받아야 할까요? (힌트: Dockerfile, 모델 파일, Image 중 무엇이 필요한가)

무엇이 필요한가

항목

새 PC에서

이유

Image

✅ 필요

Python, 라이브러리, 서버 코드가 들어 있음. 이게 있으면 설치 과정을 반복할 필요가 없음

Dockerfile

Image 대신 쓸 수 있음

레시피만 있어도 새 PC에서 docker build로 Image를 다시 만들 수 있음

모델 파일(KURE 2.2GB)

✅ 필요

우리는 Image에 굽지 않고 볼륨에 따로 두기로 했으므로 Image에 없음

모델이 왜 Image에 없는가

앞서 "모델은 볼륨으로 마운트"하기로 한 것 기억나시죠. 그 결과 이렇게 됩니다.

  • Image: 약 1GB 정도로 가볍고 코드·환경만 담음

  • 모델 파일: 별도 폴더. 새 PC에서는 다시 다운로드(Hugging Face에서 받으면 됨)하거나 기존 폴더를 복사해 옴

새 PC로 옮기는 순서

  1. Docker 설치

  2. Image 가져오기 (또는 DockerFile로 빌드)

  3. 모델 폴더 준비 (없으면 서버가 처음 실행될 때 자동 다운로드되게 만들 수 있음)

  4. docker run (모델 폴더를 볼륨으로 연결)

정리

Docker가 보장하는 것은 "환경과 코드는 어디서나 똑같다" 입니다. 데이터(모델 파일)는 별개로 챙겨야 합니다. 이 구분이 Docker 이해의 핵심입니다.

목차

  • 1. 도커가 없을 때 vs 있을 때
  • 2. DockerFile
  • 3. 유의점
  • 두 개의 시점을 구분하세요
  • 내가 이해에 대한 오답 노트
  • 확인 질문
  • 무엇이 필요한가
  • 모델이 왜 Image에 없는가
  • 정리