Dandy Now!
  • Dockerfile의 WORKDIR 명령어 이해하기
    2025년 07월 17일 11시 18분 56초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    Dockerfile의 WORKDIR 명령어 이해하기

    1. WORKDIR 명령어의 정의

    Dockerfile에서 WORKDIR 명령어는 컨테이너 내부에서 이후에 실행되는 모든 RUN, CMD, ENTRYPOINT 명령어에 대한 작업 디렉토리를 설정하는 역할을 수행한다. 이는 컨테이너 내부에서 명령어를 실행할 때 경로를 명시적으로 지정할 필요 없이 상대 경로를 사용할 수 있도록 하여, Dockerfile의 가독성과 유지보수성을 향상시키는 중요한 요소이다. WORKDIR이 설정되지 않은 경우, 기본 작업 디렉토리는 / (루트)로 설정된다.

    2. WORKDIR 명령어의 작동 방식

    WORKDIR 명령어는 컨테이너 이미지 내부에 디렉토리를 생성하고, 해당 디렉토리를 이후 명령어의 기본 작업 경로로 지정한다. 만약 지정된 디렉토리가 존재하지 않는 경우, Docker는 해당 디렉토리를 자동으로 생성한다. 이는 mkdir -p 명령어를 실행하는 것과 유사하게 작동한다.

    • WORKDIR은 여러 번 지정될 수 있으며, 마지막으로 지정된 WORKDIR이 최종 작업 디렉토리가 된다.
    • 상대 경로를 사용하여 WORKDIR을 지정할 경우, 이전 WORKDIR의 경로를 기준으로 설정된다.

    예를 들어, 다음과 같이 WORKDIR을 사용할 수 있다:

    WORKDIR /app
    WORKDIR sub_dir # 최종 작업 디렉토리는 /app/sub_dir이 된다.

    3. WORKDIR 실습을 통한 이해

    사용자의 실습 내용을 바탕으로 WORKDIR 명령어의 작동 방식을 구체적으로 살펴보는 것이 가능하다.

    3-1. Dockerfile 구성 및 이미지 빌드

    이번 실습에서는 docker-workdir 디렉토리에 위치한 Dockerfile을 사용하였다. 해당 Dockerfile의 내용은 다음과 같다:

    FROM ubuntu
    
    WORKDIR /my-dir
    
    COPY ./ ./
    
    ENTRYPOINT [ "/bin/bash", "-c", "sleep 1000" ]

    위 Dockerfile에서 WORKDIR /my-dir 명령어는 컨테이너 내부의 작업 디렉토리를 /my-dir로 설정한다. 이 Dockerfile을 사용하여 my-server라는 이름의 Docker 이미지를 빌드하는 명령어는 다음과 같다:

    docker build -t my-server .

    이 명령어를 실행하면 Dockerfile이 위치한 현재 디렉토리의 모든 파일(Dockerfile, app.txt, config.json, src/)이 이미지 내의 작업 디렉토리(/my-dir)로 복사된다.

    3-2. 컨테이너 실행 및 WORKDIR 확인

    빌드된 my-server 이미지를 사용하여 컨테이너를 백그라운드에서 실행한다.

    docker run -d my-server

    컨테이너가 실행되면 docker ps 명령어를 통해 실행 중인 컨테이너의 ID를 확인하고, 해당 컨테이너 내부로 접속하여 WORKDIR이 올바르게 설정되었는지 검증한다.

    docker exec -it [컨테이너 ID] bash

    컨테이너 내부로 접속한 후, 현재 작업 디렉토리의 내용을 확인하기 위해 ls -al 명령어를 실행한다.

    root@<컨테이너 ID>:/my-dir# ls -al
    total 16
    drwxr-xr-x 1 root root 4096 Jul 17 02:03 .
    drwxr-xr-x 1 root root 4096 Jul 17 02:03 ..
    -rwxr-xr-x 1 root root   94 Jul 17 02:03 Dockerfile
    -rwxr-xr-x 1 root root    0 Jul 17 01:38 app.txt
    -rwxr-xr-x 1 root root    0 Jul 17 01:38 config.json
    drwxr-xr-x 2 root root 4096 Jul 17 01:38 src

    위 출력에서 볼 수 있듯이, 현재 작업 디렉토리가 /my-dir로 설정되어 있음을 확인하는 것이 가능하다. 또한, COPY ./ ./ 명령어에 의해 호스트의 docker-workdir 디렉토리 내용이 컨테이너의 /my-dir 디렉토리로 복사되었음을 알 수 있다.

    작업 디렉토리가 변경되었는지 확인하기 위해 상위 디렉토리로 이동한 후 파일 목록을 다시 확인한다.

    root@<컨테이너 ID>:/my-dir# cd ..
    root@<컨테이너 ID>:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  my-dir  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

    / (루트) 디렉토리에서 /my-dir 디렉토리가 존재하는 것을 확인함으로써, WORKDIR 명령어가 성공적으로 작업 디렉토리를 설정하였음을 알 수 있다.

    4. WORKDIR 사용의 이점

    WORKDIR 명령어는 Dockerfile 작성 시 다음과 같은 이점을 제공한다:

    • 명확성: Dockerfile을 읽는 사람이 어떤 디렉토리에서 명령어가 실행되는지 쉽게 이해할 수 있다.
    • 간결성: 긴 절대 경로를 반복적으로 입력할 필요 없이 짧은 상대 경로를 사용할 수 있다.
    • 일관성: 빌드 프로세스 전반에 걸쳐 일관된 작업 환경을 유지한다.
    • 오류 감소: 작업 디렉토리를 명시함으로써 경로 관련 오류를 줄일 수 있다.

    5. 결론

    WORKDIR 명령어는 Dockerfile 작성에 있어 필수적인 요소이다. 이 명령어를 통해 컨테이너 내부의 작업 환경을 효율적으로 관리하고, Dockerfile의 가독성 및 유지보수성을 크게 향상시키는 것이 가능하다.


    728x90
    반응형
    댓글