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

[실습] 백엔드 프로젝트(Nest.js)를 Docker로 실행시키기

by jint 2026. 5. 19.

1. 백엔드 프로젝트(Nest.js)를 Docker로 실행
1) Nest.js 프로젝트 생성
- Windows PowerShell

# Nest CLI 설치
PS C:\Users\admin> npm i -g @nestjs/cli
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@nestjs/cli@11.0.21',
npm WARN EBADENGINE   required: { node: '>= 20.11' },
npm WARN EBADENGINE   current: { node: 'v20.10.0', npm: '10.2.3' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@angular-devkit/core@19.2.24',
npm WARN EBADENGINE   required: {
npm WARN EBADENGINE     npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE     node: '^18.19.1 || ^20.11.1 || >=22.0.0',
npm WARN EBADENGINE     yarn: '>= 1.13.0'
npm WARN EBADENGINE   },
npm WARN EBADENGINE   current: { node: 'v20.10.0', npm: '10.2.3' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@angular-devkit/schematics@19.2.24',
npm WARN EBADENGINE   required: {
npm WARN EBADENGINE     npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE     node: '^18.19.1 || ^20.11.1 || >=22.0.0',
npm WARN EBADENGINE     yarn: '>= 1.13.0'
npm WARN EBADENGINE   },
npm WARN EBADENGINE   current: { node: 'v20.10.0', npm: '10.2.3' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@angular-devkit/schematics-cli@19.2.24',
npm WARN EBADENGINE   required: {
npm WARN EBADENGINE     npm: '^6.11.0 || ^7.5.6 || >=8.0.0',
npm WARN EBADENGINE     node: '^18.19.1 || ^20.11.1 || >=22.0.0',
npm WARN EBADENGINE     yarn: '>= 1.13.0'
npm WARN EBADENGINE   },
npm WARN EBADENGINE   current: { node: 'v20.10.0', npm: '10.2.3' }
npm WARN EBADENGINE }

removed 3 packages, and changed 211 packages in 8s

38 packages are looking for funding
  run `npm fund` for details
npm notice
npm notice New major version of npm available! 10.2.3 -> 11.14.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.14.1
npm notice Run npm install -g npm@11.14.1 to update!
npm notice
PS C:\Users\admin> nest --version
11.0.21
# nest new {프로젝트명}
PS C:\Users\admin> nest new docker-nest-server
✨  We will scaffold your app in a few seconds..

✔ Which package manager would you ❤️  to use? npm
CREATE docker-nest-server/.prettierrc (56 bytes)
CREATE docker-nest-server/eslint.config.mjs (934 bytes)
CREATE docker-nest-server/nest-cli.json (179 bytes)
CREATE docker-nest-server/package.json (2059 bytes)
CREATE docker-nest-server/README.md (5126 bytes)
CREATE docker-nest-server/tsconfig.build.json (101 bytes)
CREATE docker-nest-server/tsconfig.json (702 bytes)
CREATE docker-nest-server/src/app.controller.ts (286 bytes)
CREATE docker-nest-server/src/app.module.ts (259 bytes)
CREATE docker-nest-server/src/app.service.ts (150 bytes)
CREATE docker-nest-server/src/main.ts (236 bytes)
CREATE docker-nest-server/src/app.controller.spec.ts (639 bytes)
CREATE docker-nest-server/test/jest-e2e.json (192 bytes)
CREATE docker-nest-server/test/app.e2e-spec.ts (754 bytes)

✔ Installation in progress... ☕

🚀  Successfully created project docker-nest-server
👉  Get started with the following commands:

$ cd docker-nest-server
$ npm run start


                          Thanks for installing Nest 🙏
                 Please consider donating to our open collective
                        to help us maintain this package.


               🍷  Donate: https://opencollective.com/nest

PS C:\Users\admin> ls


    디렉터리: C:\Users\admin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-04-29  오전 12:00                .aws
d-----      2026-04-29  오전 12:00                .azure
d-----      2025-05-20  오후 10:57                .cache
d-----      2026-04-29  오전 12:05                .cagent
d-----      2026-04-29  오전 12:05                .config
d-----      2026-05-19  오후 10:56                .docker
d-----      2026-05-13   오후 9:01                .gnupg
d-----      2026-02-26  오후 11:12                .gradle
d-----      2026-01-14  오후 10:45                .m2
d-----      2023-06-13   오후 9:29                .vscode
d-----      2026-04-29  오후 10:03                .vscode-shared
d-r---      2024-12-06   오전 5:13                Contacts
d-----      2026-05-08  오전 12:23                DataGripProjects
d-r---      2026-05-04   오전 1:20                Desktop
d-----      2026-05-19  오후 10:21                docker-nest-server
d-----      2026-05-15  오전 12:03                docker-practice
d-r---      2026-03-01   오후 8:27                Documents
d-r---      2026-05-19   오후 9:48                Downloads
d-r---      2025-07-05   오후 8:08                Favorites
d-----      2026-05-15  오후 11:19                IdeaProjects
d-----      2026-01-04   오후 6:28                IdeaSnapshots
d-----      2022-11-15   오후 3:27                Intel
d-----      2023-01-22   오후 1:13                keel
d-r---      2024-12-06   오전 5:13                Links
d-r---      2025-02-16   오후 3:54                Music
dar--l      2022-11-17   오전 1:31                OneDrive
d-r---      2026-02-08   오후 1:58                Pictures
d-----      2026-01-11  오후 12:54                Postman
d-r---      2024-12-14   오후 8:28                Saved Games
d-r---      2024-12-06   오전 5:13                Searches
d-----      2026-05-17  오후 12:29                test
d-r---      2026-04-25   오후 6:17                Videos
-a----      2026-01-18   오후 8:58             46 .gitconfig
-a----      2024-07-23   오후 8:28              0 .node_repl_history
-a----      2024-12-26  오전 11:43             22 .npmrc
-a----      2026-02-28  오전 12:17           1059 .viminfo
-a----      2025-11-17  오후 10:54            203 skb.kc


PS C:\Users\admin> cd docker-nest-server
PS C:\Users\admin\docker-nest-server> ls


    디렉터리: C:\Users\admin\docker-nest-server


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-19  오후 10:21                node_modules
d-----      2026-05-19  오후 10:20                src
d-----      2026-05-19  오후 10:20                test
-a----      2026-05-19  오후 10:21            686 .gitignore
-a----      2026-05-19  오후 10:20             56 .prettierrc
-a----      2026-05-19  오후 10:20            934 eslint.config.mjs
-a----      2026-05-19  오후 10:20            179 nest-cli.json
-a----      2026-05-19  오후 10:21         345022 package-lock.json
-a----      2026-05-19  오후 10:20           2059 package.json
-a----      2026-05-19  오후 10:20           5126 README.md
-a----      2026-05-19  오후 10:20            101 tsconfig.build.json
-a----      2026-05-19  오후 10:20            702 tsconfig.json


2) Dockerfile 작성
- docker-nest-server/Dockerfile

# 베이스 이미지 node
FROM node

# 작업 디렉토리 지정
WORKDIR /app

# 호스트 컴퓨터 파일을 컨테이너로 복사
COPY . .

# 라이브러리 설치
RUN npm install

# 빌드
RUN npm run build

# 3000번 포트 사용
EXPOSE 3000

# 빌드된 nest.js 프로젝트 실행
ENTRYPOINT ["node", "dist/main.js"]


* 심화
Docker 이미지 생성 시 캐시를 활용한 최적화 방법
Docker Layer와 Cache : https://medium.com/@hee98.09.14/docker-layer%EC%99%80-cache-574c12a1e9f7

 

Docker Layer와 Cache

Docker Layer

medium.com


3) .dockerignore 작성
- docker-nest-server/.dockerignore

node_modules


이미지 생성시, npm install 을 통해 필요한 의존성만 설치하기 때문에, 호스트 컴퓨터의 node_modules 는 컨테이너로 복사할 필요가 없다.

4) Dockerfile 바탕으로 이미지 빌드
- Windows PowerShell

PS C:\Users\admin\docker-nest-server> docker build -t docker-nest-server .
[+] Building 20.1s (11/11) FINISHED                                                                                                                                                         docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.1s
 => => transferring dockerfile: 386B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/node:latest                                                                                                                                              1.3s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.1s
 => => transferring context: 52B                                                                                                                                                                            0.0s
 => CACHED [1/5] FROM docker.io/library/node:latest@sha256:f6f9fae352b319e817eec5efc7721b3f06bc53104f2f800d0f778f3915835804                                                                                 0.0s
 => => resolve docker.io/library/node:latest@sha256:f6f9fae352b319e817eec5efc7721b3f06bc53104f2f800d0f778f3915835804                                                                                        0.0s
 => [internal] load build context                                                                                                                                                                           0.2s
 => => transferring context: 386.31kB                                                                                                                                                                       0.0s
 => [2/5] WORKDIR /app                                                                                                                                                                                      0.1s
 => [3/5] COPY . .                                                                                                                                                                                          0.1s
 => [4/5] RUN npm install                                                                                                                                                                                   8.7s
 => [5/5] RUN npm run build                                                                                                                                                                                 2.1s
 => exporting to image                                                                                                                                                                                      7.4s
 => => exporting layers                                                                                                                                                                                     4.4s
 => => exporting manifest sha256:2af88fe60892ff583ba011e399b0e06de54663385d5708cd8be3cfd8b1c620e8                                                                                                           0.0s
 => => exporting config sha256:fd8803b8eda3164a92f80a9ddc22196a19dcd2e7d63aa86645da919bb4b5b464                                                                                                             0.0s
 => => exporting attestation manifest sha256:5ca1a1e3250b9dce6cb16923c3ba1964be3570f6e773d8989767cfb26c1ad6fc                                                                                               0.1s
 => => exporting manifest list sha256:08c255d93a29bee61b629c9b98dd2b226df1a5faa0dfcd2d2a202d2099e309b0                                                                                                      0.0s
 => => naming to docker.io/library/docker-nest-server:latest                                                                                                                                                0.0s
 => => unpacking to docker.io/library/docker-nest-server:latest                                                                                                                                             2.8s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/mo8d6lezhuga55qqp6j5qvnx4


5)  이미지 생성 확인
- Windows PowerShell

PS C:\Users\admin\docker-nest-server> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
docker-nest-server:latest   08c255d93a29        2.1GB          502MB
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    U


6) 생성한 이미지 컨테이너로 실행
- Windows PowerShell

PS C:\Users\admin\docker-nest-server> docker run -d -p 3000:3000 docker-nest-server
1888fb4cffe96e626c5e83208029cda7710723287e54120f0763efba4bce8deb


7) 컨테이너 실행 확인
- Windows PowerShell

PS C:\Users\admin\docker-nest-server> docker ps
CONTAINER ID   IMAGE                COMMAND               CREATED          STATUS          PORTS                                         NAMES
1888fb4cffe9   docker-nest-server   "node dist/main.js"   17 seconds ago   Up 16 seconds   0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp   elegant_keller


8) 브라우저에서 확인
브라우저에서 http://localhost:3000/ 접속

 

Docker 로 Nest.js 서버 실행 확인


9) 실행시킨 컨테이너 중지 후 삭제, 이미지 삭제
- Windows PowerShell

PS C:\Users\admin\docker-nest-server> docker stop 1888
1888
PS C:\Users\admin\docker-nest-server> docker rm 1888
1888
PS C:\Users\admin\docker-nest-server> docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED      STATUS                    PORTS     NAMES
47c438563cdb   my-server         "/bin/bash -c 'sleep…"   2 days ago   Exited (0) 2 days ago               nice_matsumoto
11b4c5adcc08   cb8d00dbe5f5      "/bin/bash -c 'sleep…"   3 days ago   Exited (137) 3 days ago             awesome_lalande
10b3825e00f9   my-node-server    "/bin/bash -c 'sleep…"   6 days ago   Exited (0) 6 days ago               pensive_ride
e8f1ab86997c   my-jdk17-server   "/bin/bash -c 'sleep…"   6 days ago   Exited (0) 6 days ago               tender_ride
PS C:\Users\admin\docker-nest-server> docker image rm 08c2
Untagged: docker-nest-server:latest
Deleted: sha256:08c255d93a29bee61b629c9b98dd2b226df1a5faa0dfcd2d2a202d2099e309b0
PS C:\Users\admin\docker-nest-server> 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    U

 

그림으로 이해하기


10) 컨테이너 내부 파일 확인
- Windows PowerShell

PS C:\Users\admin\docker-nest-server> docker build -t docker-nest-server .
[+] Building 4.3s (11/11) FINISHED                                                                                                                                                          docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 386B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/node:latest                                                                                                                                              1.0s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 52B                                                                                                                                                                            0.0s
 => [1/5] FROM docker.io/library/node:latest@sha256:f6f9fae352b319e817eec5efc7721b3f06bc53104f2f800d0f778f3915835804                                                                                        0.0s
 => => resolve docker.io/library/node:latest@sha256:f6f9fae352b319e817eec5efc7721b3f06bc53104f2f800d0f778f3915835804                                                                                        0.0s
 => [internal] load build context                                                                                                                                                                           0.0s
 => => transferring context: 1.81kB                                                                                                                                                                         0.0s
 => CACHED [2/5] WORKDIR /app                                                                                                                                                                               0.0s
 => CACHED [3/5] COPY . .                                                                                                                                                                                   0.0s
 => CACHED [4/5] RUN npm install                                                                                                                                                                            0.0s
 => CACHED [5/5] RUN npm run build                                                                                                                                                                          0.0s
 => exporting to image                                                                                                                                                                                      2.9s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => exporting manifest sha256:2af88fe60892ff583ba011e399b0e06de54663385d5708cd8be3cfd8b1c620e8                                                                                                           0.0s
 => => exporting config sha256:fd8803b8eda3164a92f80a9ddc22196a19dcd2e7d63aa86645da919bb4b5b464                                                                                                             0.0s
 => => exporting attestation manifest sha256:3cf3ab9f92dba6a68c766b387e524c5262126c630738d4fd32db6fec5902b78b                                                                                               0.1s
 => => exporting manifest list sha256:f1cdd7cef1ddf787e044611561a6d97c57c012c5c0c860c6832d960968d7db93                                                                                                      0.0s
 => => naming to docker.io/library/docker-nest-server:latest                                                                                                                                                0.0s
 => => unpacking to docker.io/library/docker-nest-server:latest                                                                                                                                             2.8s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/jbjgajshw1bno4bt24kbzl3s9
PS C:\Users\admin\docker-nest-server> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
docker-nest-server:latest   f1cdd7cef1dd        2.1GB          502MB
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    U
PS C:\Users\admin\docker-nest-server> docker run -d -p 3000:3000 docker-nest-server
5ca9bbd6e0f37f20c9cbfed45e3e236842aa433beda36f5667c85aeedc7c2a4b
PS C:\Users\admin\docker-nest-server> docker exec -it 5ca9 bash
root@5ca9bbd6e0f3:/app# ls
Dockerfile  README.md  dist  eslint.config.mjs  nest-cli.json  node_modules  package-lock.json  package.json  src  test  tsconfig.build.json  tsconfig.json
root@5ca9bbd6e0f3:/app# cd ..
root@5ca9bbd6e0f3:/# ls
app  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@5ca9bbd6e0f3:/# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 5ca9
    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,475명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글