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/ 접속

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
비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 14,475명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 Docker 입문 실전' 카테고리의 다른 글
| [실습] 웹 프론트엔드 프로젝트(HTML, CSS, Nginx)를 Docker로 배포하기 (0) | 2026.05.21 |
|---|---|
| [실습] 웹 프론트엔드 프로젝트(Next.js)를 Docker로 배포하기 (0) | 2026.05.20 |
| EXPOSE : 컨테이너 내부에서 사용 중인 포트를 문서화하기 (0) | 2026.05.18 |
| WORKDIR : 작업 디렉토리를 지정 (0) | 2026.05.17 |
| RUN : 이미지를 생성하는 과정에서 사용할 명령문 실행 (0) | 2026.05.16 |
댓글