저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Docker로 Next.js 애플리케이션 구축하기
Next.js Dockerfile 작성하기
Node.js 설치가 끝났으니 create-next-app으로 예제 Next.js 애플리케이션을 생성합니다.
- Ok to proceed? (y): y를 입력합니다.
- ✔ What is your project named? …: exampleapp을 입력합니다.
~$ npx create-next-app --typescript --use-npm
Need to install the following packages:
create-next-app@12.3.1
Ok to proceed? (y) y
✔ What is your project named? … exampleapp
Creating a new Next.js app in /home/pyrasis/exampleapp.
Using npm.
Installing dependencies:
- react
- react-dom
- next
added 18 packages, and audited 19 packages in 9s
2 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Installing devDependencies:
- eslint
- eslint-config-next
- typescript
- @types/react
- @types/node
- @types/react-dom
added 217 packages, and audited 236 packages in 29s
77 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Success! Created exampleapp at /home/pyrasis/exampleapp
먼저 .dockerignore
파일이 필요합니다. 다음 내용을 .dockerignore로 저장합니다.
~/exampleapp/.dockerignore
node_modules
이제 다음 내용을 Dockerfile로 저장합니다.
~/exampleapp/Dockerfile
FROM node:16-alpine
ADD ./ /var/www/exampleapp
WORKDIR /var/www/exampleapp
RUN npm install
RUN npm run build
CMD ["npm", "run", "start"]
여기서는 node:16-alpine 이미지를 사용하도록 하겠습니다.
- FROM으로 node:16-alpine를 기반으로 이미지를 생성하도록 설정합니다.
- Next.js 애플리케이션 디렉터리를 /var/www/exampleapp 디렉터리에 추가합니다.
- WORKDIR로 /var/www/exampleapp를 작업 디렉터리로 설정합니다.
- RUN으로
npm install
을 실행하여 패키지를 설치하고,npm run build
를 실행하여 Next.js 앱을 빌드합니다. - CMD로
npm run start
를 실행하도록 설정합니다.
docker build
명령으로 이미지를 생성합니다.
~/exampleapp$ sudo docker build --tag nextjs .
이제 docker run
명령으로 컨테이너를 생성해봅니다.
~/exampleapp$ sudo docker run -it --rm -p 3000:3000 nextjs
--rm
옵션은 컨테이너를 종료하면 컨테이너를 바로 삭제합니다.
웹 브라우저에서 http://<컨테이너 IP 주소 또는 도메인>:3000으로 접속해봅니다(Docker Desktop에서 실행했다면 http://127.0.0.1:3000입니다).
Welcome to Next.js!
화면이 표시되면 Next.js 앱이 정상적으로 실행된 것입니다. 확인이 끝났으면 Ctrl+C를 눌러 Next.js 앱을 종료합니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.