- Dockerfile의 WORKDIR 명령어 이해하기2025년 07월 17일 11시 18분 56초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
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반응형'DevOps > Docker' 카테고리의 다른 글
Next.js 애플리케이션을 Docker와 Alpine으로 배포하기 (1) 2025.07.21 Docker를 활용한 Nest.js 애플리케이션 컨테이너화 및 관리 (0) 2025.07.18 Dockerfile `RUN` 명령어: 컨테이너에 Git 설치해 보기 (0) 2025.07.17 Spring Boot 애플리케이션 Docker 이미지 빌드 및 실행 가이드 (0) 2025.07.15 Docker 컨테이너의 시작점: ENTRYPOINT 명령어 완벽 이해 (0) 2025.07.15 다음글이 없습니다.이전글이 없습니다.댓글