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

[실습] Docker Compose로 프론트엔드(Next.js) 실행시키기

by jint 2026. 5. 30.

1. Docker Compose 로 프론트엔드(Next.js) 실행
1) Next.js 프로젝트 생성
- Windows PowerShell

PS C:\Users\admin> npx create-next-app@latest
√ What is your project named? ... compose-next-server
√ Would you like to use the recommended Next.js defaults? » Yes, use recommended defaults
Creating a new Next.js app in C:\Users\admin\compose-next-server.

Using npm.

Initializing project with template: app-tw


Installing dependencies:
- next
- react
- react-dom

Installing devDependencies:
- @tailwindcss/postcss
- @types/node
- @types/react
- @types/react-dom
- eslint
- eslint-config-next
- tailwindcss
- typescript

npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'eslint-visitor-keys@5.0.1',
npm WARN EBADENGINE   required: { node: '^20.19.0 || ^22.13.0 || >=24' },
npm WARN EBADENGINE   current: { node: 'v20.10.0', npm: '10.2.3' }
npm WARN EBADENGINE }

added 359 packages, and audited 360 packages in 20s

142 packages are looking for funding
  run `npm fund` for details

2 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

Generating route types...
✓ Types generated successfully

Initialized a git repository.

Success! Created compose-next-server at C:\Users\admin\compose-next-server

PS C:\Users\admin> cd compose-next-server
PS C:\Users\admin\compose-next-server> ls


    디렉터리: C:\Users\admin\compose-next-server


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-30   오후 6:49                .next
d-----      2026-05-30   오후 6:48                app
d-----      2026-05-30   오후 6:49                node_modules
d-----      2026-05-30   오후 6:48                public
-a----      2026-05-20  오후 10:47            480 .gitignore
-a----      2026-05-30   오후 6:49            327 AGENTS.md
-a----      2026-05-30   오후 6:49             11 CLAUDE.md
-a----      2026-05-20  오후 10:47            465 eslint.config.mjs
-a----      2026-05-20  오후 10:47            247 next-env.d.ts
-a----      2026-05-20  오후 10:47            133 next.config.ts
-a----      2026-05-30   오후 6:49         219551 package-lock.json
-a----      2026-05-30   오후 6:48            542 package.json
-a----      2026-05-20  오후 10:47             94 postcss.config.mjs
-a----      2026-05-20  오후 10:47           1450 README.md
-a----      2026-05-30   오후 6:48            666 tsconfig.json


2) Dockerfile 작성
- compose-next-server/Dockerfile

# 베이스 이미지 node
FROM node:20-alpine

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

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

# 라이브러리 설치
RUN npm install

# 빌드
RUN npm run build

# 3000번 포트 사용 명시
EXPOSE 3000

# 빌드된 next.js 프로젝트 실행
ENTRYPOINT [ "npm", "run", "start" ]


· alpine : 불필요한 프로그램을 포함하지 않고 이미지 크기를 최소화한 버전 (최적화된 버전)
실제 배포시, alpine 버전 사용 권장 (현업 Production(운영) 환경에서 많이 씀)

3) .dockerignore 작성
- compose-next-server/.dockerignore

node_modules


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

4) compose 파일 작성
compose.yml 작성하지 않고 Docker CLI 로 실행시킬 때)

$ docker build -t compose-next-server .
$ docker run -d -p 80:3000 compose-next-server


- compose-next-server/compose.yml

services:
  compose-next-server:
    build: .
    ports:
      - 80:3000


5) compose 파일 실행
- Windows PowerShell

PS C:\Users\admin\compose-next-server> docker compose up --build -d
#1 [internal] load local bake definitions
#1 reading from stdin 603B 0.0s done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 404B done
#2 DONE 0.1s

#3 [internal] load metadata for docker.io/library/node:20-alpine
#3 ...

#4 [auth] library/node:pull token for registry-1.docker.io
#4 DONE 0.0s

#3 [internal] load metadata for docker.io/library/node:20-alpine
#3 DONE 1.3s

#5 [internal] load .dockerignore
#5 transferring context: 52B done
#5 DONE 0.1s

#6 [internal] load build context
#6 DONE 0.0s

#7 [1/5] FROM docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293
#7 resolve docker.io/library/node:20-alpine@sha256:fb4cd12c85ee03686f6af5362a0b0d56d50c58a04632e6c0fb8363f609372293 0.0s done
#7 DONE 0.0s

#6 [internal] load build context
#6 transferring context: 374.22kB 0.0s done
#6 DONE 0.1s

#8 [2/5] WORKDIR /app
#8 CACHED

#9 [3/5] COPY . .
#9 DONE 0.1s

#10 [4/5] RUN npm install
#10 10.83
#10 10.83 added 366 packages, and audited 367 packages in 10s
#10 10.83
#10 10.83 146 packages are looking for funding
#10 10.83   run `npm fund` for details
#10 10.85
#10 10.85 2 moderate severity vulnerabilities
#10 10.85
#10 10.85 To address all issues (including breaking changes), run:
#10 10.85   npm audit fix --force
#10 10.85
#10 10.85 Run `npm audit` for details.
#10 10.85 npm notice
#10 10.85 npm notice New major version of npm available! 10.8.2 -> 11.16.0
#10 10.85 npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.16.0
#10 10.85 npm notice To update run: npm install -g npm@11.16.0
#10 10.85 npm notice
#10 DONE 11.3s

#11 [5/5] RUN npm run build
#11 0.408
#11 0.408 > compose-next-server@0.1.0 build
#11 0.408 > next build
#11 0.408
#11 0.748 Attention: Next.js now collects completely anonymous telemetry regarding usage.
#11 0.748 This information is used to shape Next.js' roadmap and prioritize features.
#11 0.748 You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
#11 0.748 https://nextjs.org/telemetry
#11 0.748
#11 0.765 ▲ Next.js 16.2.6 (Turbopack)
#11 0.765
#11 0.831   Creating an optimized production build ...
#11 2.299 ✓ Compiled successfully in 1306ms
#11 2.310   Running TypeScript ...
#11 3.815   Finished TypeScript in 1504ms ...
#11 3.817   Collecting page data using 5 workers ...
#11 4.125   Generating static pages using 5 workers (0/4) ...
#11 4.482   Generating static pages using 5 workers (1/4)
#11 4.484   Generating static pages using 5 workers (2/4)
#11 4.485   Generating static pages using 5 workers (3/4)
#11 4.485 ✓ Generating static pages using 5 workers (4/4) in 360ms
#11 4.490   Finalizing page optimization ...
#11 4.497
#11 4.498 Route (app)
#11 4.498 ┌ ○ /
#11 4.498 └ ○ /_not-found
#11 4.498
#11 4.498
#11 4.498 ○  (Static)  prerendered as static content
#11 4.498
#11 DONE 4.7s

#12 exporting to image
#12 exporting layers
#12 exporting layers 17.0s done
#12 exporting manifest sha256:f290f4711e8c68f6a18b45f931530ea21721244ea328c405de7e707ee25e9f1b 0.0s done
#12 exporting config sha256:3258e68e885bcd5c86453242be7ed1b609d56ba7df9904590fa5ccc2e46450fb 0.0s done
#12 exporting attestation manifest sha256:e7c38d32a1a6e85b7288ae0a33262285286cea395782e5092d230dbf273eed2d 0.1s done
#12 exporting manifest list sha256:4e26f54e6c8c2872c4fb1ffd8b91647b2ba614467c8e63a46154200ac55e94c4
#12 exporting manifest list sha256:4e26f54e6c8c2872c4fb1ffd8b91647b2ba614467c8e63a46154200ac55e94c4 0.0s done
#12 naming to docker.io/library/compose-next-server-compose-next-server:latest done
#12 unpacking to docker.io/library/compose-next-server-compose-next-server:latest
#12 unpacking to docker.io/library/compose-next-server-compose-next-server:latest 4.0s done
#12 DONE 21.3s

#13 resolving provenance for metadata file
#13 DONE 0.0s
[+] up 3/3
 ✔ Image compose-next-server-compose-next-server       Built                                                                                                                                                39.9s
 ✔ Network compose-next-server_default                 Created                                                                                                                                               0.0s
 ✔ Container compose-next-server-compose-next-server-1 Started                                                                                                                                               0.9s

What's next:
    Filter, search, and stream logs from all your Compose services
    in one place with Docker Desktop's Logs view. docker-desktop://dashboard/logs?appId=compose-next-server


6) compose 실행 현황 확인, 이미지 생성 확인
- Windows PowerShell

PS C:\Users\admin\compose-next-server> docker compose ps
NAME                                        IMAGE                                     COMMAND           SERVICE               CREATED          STATUS          PORTS
compose-next-server-compose-next-server-1   compose-next-server-compose-next-server   "npm run start"   compose-next-server   38 seconds ago   Up 37 seconds   0.0.0.0:80->3000/tcp, [::]:80->3000/tcp
PS C:\Users\admin\compose-next-server> docker ps
CONTAINER ID   IMAGE                                     COMMAND           CREATED          STATUS          PORTS                                     NAMES
d0b1b85f7d5d   compose-next-server-compose-next-server   "npm run start"   40 seconds ago   Up 39 seconds   0.0.0.0:80->3000/tcp, [::]:80->3000/tcp   compose-next-server-compose-next-server-1
PS C:\Users\admin\compose-next-server> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                                            ID             DISK USAGE   CONTENT SIZE   EXTRA
compose-nest-server-compose-nest-server:latest   c50411fed584        2.1GB          502MB
compose-next-server-compose-next-server:latest   4e26f54e6c8c       1.41GB          398MB    U
compose-spring-boot-server-my-server:latest      dc64aff88c24        719MB          230MB
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
mysql:latest                                     c11782aa2a96        1.3GB          290MB
nginx:latest                                     5aca99593157        241MB           66MB
redis:latest                                     4d25e2fe601f        204MB         55.3MB


7) 컨테이너 로그 확인
- Windows PowerShell

PS C:\Users\admin\compose-next-server> docker compose logs
compose-next-server-1  |
compose-next-server-1  | > compose-next-server@0.1.0 start
compose-next-server-1  | > next start
compose-next-server-1  |
compose-next-server-1  | ▲ Next.js 16.2.6
compose-next-server-1  | - Local:         http://localhost:3000
compose-next-server-1  | - Network:       http://172.18.0.2:3000
compose-next-server-1  | ✓ Ready in 125ms

What's next:
    Filter, search, and stream logs from all your Compose services
    in one place with Docker Desktop's Logs view. docker-desktop://dashboard/logs?appId=compose-next-server


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

 

Docker Compose 로 Next.js 서버 실행 확인


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

PS C:\Users\admin\compose-next-server> docker compose down
[+] down 2/2
 ✔ Container compose-next-server-compose-next-server-1 Removed                                                                                                                                               0.3s
 ✔ Network compose-next-server_default                 Removed                                                                                                                                               0.2s
PS C:\Users\admin\compose-next-server> docker compose ps
NAME      IMAGE     COMMAND   SERVICE   CREATED   STATUS    PORTS
PS C:\Users\admin\compose-next-server> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES



참고링크 : 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,486명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글