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한 모든 데이터가 해당 디렉토리 내에 저장되있음을 알 수 있습니다.
'MLOps > Docker' 카테고리의 다른 글
[Docker#15] Docker Compose 여러 개의 컨테이너 동시에 띄우기(1) (0) | 2025.05.13 |
---|---|
[Docker#14] Docker Compose란? (0) | 2025.05.12 |
[Docker#12] Dockerfile RUN (0) | 2025.05.12 |
[Docker#11] Dockerfile ENTRYPOINT (0) | 2025.05.12 |
[Docker#10] Dockerfile COPY (0) | 2025.05.12 |