MLOps/Docker

[Docker#13] Dockerfile WORKDIR

j.d 2025. 5. 12. 17:23

Docker를 사용할 때, 아무 디렉터리에나 파일을 복사하거나 실행하면 컨테이너 내부가 금방 지저분해집니다.
이 문제를 해결해주는 중요한 명령어가 바로 WORKDIR입니다.

 

이번 글에서는 WORKDIR의 의미, 사용법을 알아보도록 하겠습니다.

 

 

 

WORKDIR이란?

WORKDIR은 Dockerfile에서 작업 디렉터리를 설정하는 명령어입니다.
설정된 디렉터리 이후에 등장하는 RUN, COPY, CMD, ENTRYPOINT 등 모든 명령은 이 디렉터리를 기준으로 동작합니다.

비유하자면, 미니 컴퓨터의 "작업 폴더"를 미리 지정해두는 것과 같습니다.

 

 

왜 써야 할까?

 

  • 파일이 깔끔하게 정리됩니다.
  • 컨테이너 내부가 혼란스럽지 않습니다.
  • 대규모 프로젝트에서도 관리가 쉬워집니다.
  • 안 쓰면 컨테이너 루트(/)에 파일이 섞여버립니다.
WORKDIR [절대 경로]

# 예시
WORKDIR /usr/src/app

 

 

 

 

실습

# 디렉토리 구조
.
├── Dockerfile
├── main.py
├── requirements.txt
└── config.json
# requirements.txt
requests
# main.py
import requests

res = requests.get("https://httpbin.org/get")
print("요청 성공:", res.status_code)

 

WORKDIR 없이 구성했을 때

# Dockerfile
FROM python:3.11-slim

COPY . . 

RUN pip install -r requirements.txt

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]

루트 디렉터리에 모든 파일이 섞여버려 구조가 지저분합니다.

 

 

WORKDIR을 활용한 구성

FROM python:3.11-slim

# 이후 모든 작업은 /app에서 이루어짐
WORKDIR /app  

# 현재 디렉터리 → /app 내부로 복사
COPY . .       

RUN pip install -r requirements.txt

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]

 

exec -it를 통해 들어가자마자 경로가 /app으로 지정되어 있으며 copy한 모든 데이터가 해당 디렉토리 내에 저장되있음을 알 수 있습니다.