본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

WORKDIR : 작업 디렉토리를 지정

by jint 2026. 5. 17.

1. WORKDIR
WORKDIR 작업 디렉토리로 사용할 절대 경로 : 작업 디렉토리 지정
이후 등장하는 RUN, CMD, ENTRYPOINT, COPY, ADD 명령문은 해당 디렉토리 기준으로 실행

작업 디렉토리를 지정하는 이유는 Dockerfile 을 통해 생성되는 파일들을 특정 폴더에 정리하는 것이 추후 관리가 쉽기 때문이다.
만약 WORKDIR 을 쓰지 않으면 컨테이너 내부에 존재하는 기존 파일들과 뒤섞인다.
컨테이너도 미니 컴퓨터와 같기 때문에, 컨테이너 내부 폴더를 깔끔하게 관리해야 한다.

 

# 예시
WORKDIR /usr/src/app



2. 예제
1) app.txt, src, config.json 파일 만들기
- Windows PowerShell

PS C:\Users\admin> mkdir docker-workdir


    디렉터리: C:\Users\admin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-17  오후 10:33                docker-workdir


docker-workdir 경로에 Dockerfile, app.txt, config.json, src 폴더 생성

2) Dockerfile 만들어서 이미지 생성 및 컨테이너 실행
#1 WORKDIR 안 썼을 때 파일이 어떻게 구성되는지 확인
- docker-practice/Dockerfile

FROM ubuntu

COPY ./ ./

# 디버깅용 코드
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]


- Windows PowerShell

PS C:\Users\admin> cd docker-workdir
PS C:\Users\admin\docker-workdir> ls


    디렉터리: C:\Users\admin\docker-workdir


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-17  오후 10:36                src
-a----      2026-05-17  오후 10:36              0 app.txt
-a----      2026-05-17  오후 10:36              0 config.json
-a----      2026-05-17  오후 10:37             95 Dockerfile


PS C:\Users\admin\docker-workdir> docker build -t my-server .
[+] Building 2.2s (8/8) FINISHED                                                                                                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.1s
 => => transferring dockerfile: 132B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                                                            1.3s
 => [auth] library/ubuntu:pull token for registry-1.docker.io                                                                                                                                               0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.1s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => [internal] load build context                                                                                                                                                                           0.1s
 => => transferring context: 215B                                                                                                                                                                           0.0s
 => CACHED [1/2] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64                                                                               0.1s
 => => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64                                                                                      0.1s
 => [2/2] COPY ./ ./                                                                                                                                                                                        0.1s
 => exporting to image                                                                                                                                                                                      0.4s
 => => exporting layers                                                                                                                                                                                     0.2s
 => => exporting manifest sha256:524deacc495a51bd545503e076ea9ff93840f2ff1b83263c738c074af61c4052                                                                                                           0.0s
 => => exporting config sha256:6ad5564528ccbe4597068cbf56b68c5df0c085f984335a8a6a9303851e0c22e9                                                                                                             0.0s
 => => exporting attestation manifest sha256:927b4fc1e17270ab6d1f4a54fcdc435641f32f226ffe214298b30296b52913be                                                                                               0.1s
 => => exporting manifest list sha256:d63e6a4daf7726cfc7bf295b8e277927edb4922cdc0d5e0d5717762106c80a59                                                                                                      0.0s
 => => naming to docker.io/library/my-server:latest                                                                                                                                                         0.0s
 => => unpacking to docker.io/library/my-server:latest                                                                                                                                                      0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/327vdstdm6fv3j1htkeya3fj5
PS C:\Users\admin\docker-workdir> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB
my-jdk17-server:latest   09a2803e5d8e        682MB          212MB    U
my-node-server:latest    9a1e49574c81       1.77GB          442MB    U
my-server:latest         d63e6a4daf77        157MB         41.6MB
PS C:\Users\admin\docker-workdir> docker run -d my-server
74060a87cb0dd6fed6fff7f3e236836a5d06b5f2f54fd04d930601ab880c9d3f
PS C:\Users\admin\docker-workdir> docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS     NAMES
74060a87cb0d   my-server   "/bin/bash -c 'sleep…"   6 seconds ago   Up 5 seconds             zen_mcclintock
PS C:\Users\admin\docker-workdir> docker exec -it 7406 bash
root@74060a87cb0d:/# ls
Dockerfile  app.txt  bin  boot  config.json  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  src  srv  sys  tmp  usr  var
root@74060a87cb0d:/# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 7406
    Learn more at https://docs.docker.com/go/debug-cli/


#2 WORKDIR 썼을 때 파일이 어떻게 구성되는지 확인
- docker-practice/Dockerfile

FROM ubuntu

WORKDIR /my-dir

COPY ./ ./

# 디버깅용 코드
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]


- Windows PowerShell

PS C:\Users\admin\docker-workdir> docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS                      PORTS     NAMES
74060a87cb0d   my-server         "/bin/bash -c 'sleep…"   2 minutes ago   Up 2 minutes                          zen_mcclintock
11b4c5adcc08   cb8d00dbe5f5      "/bin/bash -c 'sleep…"   27 hours ago    Exited (137) 27 hours ago             awesome_lalande
10b3825e00f9   my-node-server    "/bin/bash -c 'sleep…"   4 days ago      Exited (0) 4 days ago                 pensive_ride
e8f1ab86997c   my-jdk17-server   "/bin/bash -c 'sleep…"   4 days ago      Exited (0) 4 days ago                 tender_ride
PS C:\Users\admin\docker-workdir> docker rm -f 7406
7406
PS C:\Users\admin\docker-workdir> docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS                      PORTS     NAMES
11b4c5adcc08   cb8d00dbe5f5      "/bin/bash -c 'sleep…"   27 hours ago   Exited (137) 27 hours ago             awesome_lalande
10b3825e00f9   my-node-server    "/bin/bash -c 'sleep…"   4 days ago     Exited (0) 4 days ago                 pensive_ride
e8f1ab86997c   my-jdk17-server   "/bin/bash -c 'sleep…"   4 days ago     Exited (0) 4 days ago                 tender_ride
PS C:\Users\admin\docker-workdir> docker build -t my-server .
[+] Building 1.8s (8/8) FINISHED                                                                                                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 151B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                                                            0.8s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => CACHED [1/3] FROM docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64                                                                               0.1s
 => => resolve docker.io/library/ubuntu:latest@sha256:f3d28607ddd78734bb7f71f117f3c6706c666b8b76cbff7c9ff6e5718d46ff64                                                                                      0.0s
 => [internal] load build context                                                                                                                                                                           0.0s
 => => transferring context: 226B                                                                                                                                                                           0.0s
 => [2/3] WORKDIR /my-dir                                                                                                                                                                                   0.1s
 => [3/3] COPY ./ ./                                                                                                                                                                                        0.1s
 => exporting to image                                                                                                                                                                                      0.5s
 => => exporting layers                                                                                                                                                                                     0.3s
 => => exporting manifest sha256:b44d9d64c881f4eb7ec719d0d1e2112959c48881f577c26d0108ab69b8591603                                                                                                           0.0s
 => => exporting config sha256:532b990f9a16f602c1571a6f07b1248f04150e9c7998ba5ced16b2fd1dfc2d2a                                                                                                             0.0s
 => => exporting attestation manifest sha256:d27a9fd23cb7f751e7fab1bef365cf24573427d3fc060e9ae103d053598263f8                                                                                               0.1s
 => => exporting manifest list sha256:c8dad74bef6b8db0c28fa7d01724f432e1f0cd68211891360c1d209e4d2bc374                                                                                                      0.0s
 => => naming to docker.io/library/my-server:latest                                                                                                                                                         0.0s
 => => unpacking to docker.io/library/my-server:latest                                                                                                                                                      0.1s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/tgrdklxwuap8bk5q34u32l0py
PS C:\Users\admin\docker-workdir> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB
my-jdk17-server:latest   09a2803e5d8e        682MB          212MB    U
my-node-server:latest    9a1e49574c81       1.77GB          442MB    U
my-server:latest         c8dad74bef6b        157MB         41.6MB
PS C:\Users\admin\docker-workdir> docker run -d my-server
47c438563cdb3237baca2c013b86c8a7ac49d41eaf871e0e386da6629623ae16
PS C:\Users\admin\docker-workdir> docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS     NAMES
47c438563cdb   my-server   "/bin/bash -c 'sleep…"   8 seconds ago   Up 8 seconds             nice_matsumoto
PS C:\Users\admin\docker-workdir> docker exec -it 47c4 bash
root@47c438563cdb:/my-dir# ls
Dockerfile  app.txt  config.json  src
root@47c438563cdb:/my-dir# cd ..
root@47c438563cdb:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  my-dir  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@47c438563cdb:/# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 47c4
    Learn more at https://docs.docker.com/go/debug-cli/



참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085

 

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 4.9점 수강생 14,472명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글