Dockerfile에서 WORKDIR은 뭘할까?

Atmosphere·2025년 8월 1일

왜?

목록 보기
1/1

오늘의 질문은?

Dockerfile에서 WORKDIR은 어떤 역할을 할까?

Dockerfile?

docker image를 생성하기 위해 작성해야하는 파일이다.

문법은 어떻게 되요?

기본적으로 이렇게 쓴다. (node.js 기준)

FROM node:20

WORKDIR /app/start

COPY package*.json ./

RUN npm install
COPY . .
EXPOSE 3000
CMD ["node","app.js"]

각 명령어에 대한 설명은 이 블로그를 참고하자.

1. 그래서 WORKDIR이 왜요?

구글링으로 WORKDIR을 검색했을때 리눅스 명령어 cd와 비슷한 명령어래서
"아 그럼 실행하면 실제로 현재 위치가 바뀌거나 이동되나?" 싶었다.
그래서 docker run으로 실행해봤는데도 바뀌는게 없었다.
뭐지? 싶어서 GPT에게 물어봤다.

📌 알아둬야 할 핵심 개념 3가지
1. 컨테이너 내부 디렉토리 경로 설정

  • Dockerfile 내 이후의 명령어(RUN, CMD, COPY, ADD)들이 어느 디렉토리 기준으로 실행될지를 정함.

예시:

WORKDIR /app/start
COPY . .  # => 컨테이너 내부의 /app/start 기준으로 현재 폴더가 복사됨

2. 디렉토리가 없다면 자동 생성됨

  • /app/start가 존재하지 않아도 자동으로 만들어짐. 단, 이건 컨테이너 이미지 안에서만 보임.
  • 호스트(EC2, PC) 파일시스템에는 아무 변화도 없음. 그래서 밖에서 보면 아무것도 안 생긴 것처럼 보임.

3. 호스트랑 컨테이너는 다른 세계

  • Dockerfile이나 컨테이너 내부에서 설정한 디렉토리는 호스트에 영향을 주지 않음.
  • Docker는 격리된 가상 환경을 만들기 때문이야. 외부에 /app/start가 생기지 않는 게 맞는 동작이야.

첫번째 요약

그럼 직접 컨테이너 내부로 들어가볼까?

좋은 생각이다. 들어가보자.

docker run -it --rm your-image-name sh혹은
docker run -it --rm your-container-name sh로 컨테이너 내부에 들어갔다.

ls를 해보면?

뭔가 뜨는거같긴 하고?

2. 근데 왜 /app/start가 안뜨죠?

이때 가장 먼저 해야할 것은 pwd로 현재 위치 확인하기다.

pwd로 확인했더니 현재 경로가 /app/start임을 확인할 수 있었다.

3. 왜 프롬포트에 경로 명시가 안되지?

이건 docker container 내부로 sh로 들어가면 이렇게 나온다고 한다.

sh는 PS1(프롬프트 표시 형식)이 단순해서 경로를 표시하지 않음.
예: 그냥 # 만 나옴

흔히 우분투에서 보는 cli처럼 경로가 보이게 하려면 bash를 설치해주고 bash로 들어가면 된다.

apt update && apt install -y bash
bash

경로가 잘 보이는 걸 확인할 수 있다!

4. 그냥 cd 치고 ls -al해도 아무것도 안나와요..

왜이럴까 싶었다. 이유는 단순했다.
아무것도 안 넣어서요.

디렉토리설명
/rootroot 유저의 홈 디렉토리. 기본적으로 비어 있음.
/app/startDockerfile에서 WORKDIRCOPY를 통해 지정된 작업 디렉토리.
ls -l 결과가 0그 디렉토리에 파일이 없다는 뜻. Docker는 필요 없는 건 만들지 않아.

마무리

dockerfile쓰면서 이해가 안됬던 부분이라 실습하면서 이해되서 재밌었다.

profile
작게, 빠르게, 지속가능하게

0개의 댓글