Docker에 대해 상세히
생성일 : 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는 아래 일들을 한다.
파이썬 설치 - 버전 맞추기
pip install torch sentence-transformers fastapi ...다른 프로젝트와 라이브러리 버전이 충돌하면 해결작업 진행
서버 실행
만약 다음달에 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. 유의점
두 개의 시점을 구분하세요
헷갈리기 쉬운 부분이 시점
시점 | 명령 | 일어나는 일 |
|---|---|---|
빌드 시 |
| Dockerfile의 |
실행 시 |
| Image로 Container가 만들어지고 |
그래서 라이브러리 설치는 한 번 빌드해 두면 이후 실행은 빠름.
비유 정리
DockerFile : 요리 레시피 (텍스트)
Image : 레시피대로 만들어 냉동한 밀키트 (한 번 만들어 두면 계속 사용가능)
Container : 밀키트를 데워서 실제로 먹는 중인 음식 (실행 중인 프로세스)
Volume : 음식이 아니라 냉장고 (음식이 없어져도 재료인 KURE 모델 파일은 거기 남음)
내가 이해에 대한 오답 노트
도커에서 컨테이너가 실행 되면 그 안에서 FastAPI 서버가 실행
도커는 저장소가 아니라 실행 도구. Image는 저장되지만 그건 포장물이고, 서버는
"docker run"으로 실행해야 살아남KURE 모델은 image에 넣지 않고 볼륨에 따로 둠
하나의 패키지로 만들어 어디든 가져와서 다른 PC에서 꺼내서 사용 가능
DOcker는 내가 가진 컴퓨터든 클라우드든 어디서나 같게 돌리는 포장 방식.
KURE는 파일이 커서 Render 무료 플랜에는 올릴 수 없다. (문제 A)
그래서 내 PC에서 실행하기로 한다. (문제 A의 해결)
그런데 내 PC에서 실행하려면 Python, torch 등 환경 설정이 번거롭고 PC가 바뀌면 다시 해야 한다. (문제 B)
Docker로 실행 환경과 서버 코드를 패키지(Image) 로 만들어 두면, 어떤 PC에서든
docker run한 줄로 같은 서버가 뜬다. (문제 B의 해결)
확인 질문
PC를 새것으로 바꿨다고 해봅시다. Docker가 있을 때 무엇을 옮기고 무엇을 새로 다운받아야 할까요? (힌트: Dockerfile, 모델 파일, Image 중 무엇이 필요한가)
무엇이 필요한가
항목 | 새 PC에서 | 이유 |
|---|---|---|
Image | ✅ 필요 | Python, 라이브러리, 서버 코드가 들어 있음. 이게 있으면 설치 과정을 반복할 필요가 없음 |
Dockerfile | Image 대신 쓸 수 있음 | 레시피만 있어도 새 PC에서 |
모델 파일(KURE 2.2GB) | ✅ 필요 | 우리는 Image에 굽지 않고 볼륨에 따로 두기로 했으므로 Image에 없음 |
모델이 왜 Image에 없는가
앞서 "모델은 볼륨으로 마운트"하기로 한 것 기억나시죠. 그 결과 이렇게 됩니다.
Image: 약 1GB 정도로 가볍고 코드·환경만 담음
모델 파일: 별도 폴더. 새 PC에서는 다시 다운로드(Hugging Face에서 받으면 됨)하거나 기존 폴더를 복사해 옴
새 PC로 옮기는 순서
Docker 설치
Image 가져오기 (또는 DockerFile로 빌드)
모델 폴더 준비 (없으면 서버가 처음 실행될 때 자동 다운로드되게 만들 수 있음)
docker run(모델 폴더를 볼륨으로 연결)
정리
Docker가 보장하는 것은 "환경과 코드는 어디서나 똑같다" 입니다. 데이터(모델 파일)는 별개로 챙겨야 합니다. 이 구분이 Docker 이해의 핵심입니다.