될때까지

((기업협업8)) Node.js로 진행했던 프로젝트 Docker 컨테이너에 넣기 본문

프로젝트/wecode : 기업협업

((기업협업8)) Node.js로 진행했던 프로젝트 Docker 컨테이너에 넣기

랖니 2022. 9. 11. 23:50
728x90

Docker란?

.Dockerfile 만들기

# 어떤 이미지로부터 새로운 이미지를 생성할건가?
FROM node:16.16.0

# 워킹 디렉토리 설정
WORKDIR /usr/src/app

# Docker를 실행할때 패키지에 대한 정보를 이미지로 저장한다
COPY package*.json ./

# npm install 명령어로 디펜던시를 설치하기
RUN npm install 

# 현재 경로에 있는 모든 파일을 이미지로 저장하겠다.
COPY . .

# PORT 연결하기
EXPOSE 4000

# 컨테이너에서 실행될 명령어
CMD ["npm", "start"]
  • FROM node:16.16.0
    • 어떤 이미지를 사용해서 빌드할것인지 명시 -> node:16.16.0 이미지를 base image로 사용하겠다.
  • WORKDIR /usr/src/app
    • 이미지안에 애플리케이션 코드를 넣기 위한 디렉터리 생성
  • COPY package*.json ./
    • node:16.16.0 이미지에는 node.js와 npm은 이미 설치되었다. 종속성만 설치하면 된다.
  • RUN npm install
    • 컨테이너 생성하기 전에 수행될 명령어
    • npm install을 사용해 package.json에 명시된 종속성(디펜던시)을 다운로드한다.
  • COPY . .
    • 첫번째 .은 컨테이너로 복사하려고 하는 파일 or 폴더를 지칭 -> 루트 경로의 모든 파일들 복사하겠다.
    • 두번째 .은 컨테이너에 복사되는 경로 -> WORKDIR에서 지정한 경로로 복사하겠다.
    • 도커 이미지안에 애플리케이션의 소스 코드를 집어넣는 코드
  • EXPOSE 4000
    • 4000번 포트로 실행하겠다.
  • CMD ["npm", "start"]
    • 컨테이너 생성 후 도커가 실행될 때 수행할 명령어
    • npm start 명령어로 서버를 구동시킨다.

 

.dockerignore 파일 생성하기

도커 이미지에 로컬 모듈과 디버깅 로그를 복사하는 것을 막음으로써 이미지 내에서 설치한 모듈이 덮어쓰이지 않게 한다.

node_modules
npm-debug.log

 

이미지 빌드

docker build . -t <your username>/node-web-app:tag

이미지를 만드는 중

 

생성한 이미지 파일 조회하기

docker images

 

이제까지 생성한 2가지 이미지가 조회된다.

 

이미지 실행하기

docker run -p 49160:8080 -d <your username>/node-web-app

컨테이너 아이디보기

docker ps

컨테이너 로그보기

docker logs --follow 도커아이디

 

 

참고한 포스팅

https://programmingsummaries.tistory.com/392

https://nodejs.org/ko/docs/guides/nodejs-docker-webapp/

728x90