[Docker] node.js 애플리케이션 도커로 만들기

2023. 4. 13. 15:52docker

빈 프로젝트에 

yarn init (npm init하셔도 무방합니다)  -> packge.json생성

server.js생성 후 간단한 GET요청 하는 express 프레임워크를 이용한 코드입니다.

 

dockerfile에 위와 같이 작성해줍니다.  

 

FROM

하나의 Docker이미지는 base이미지부터 시작해서 기존 이미지 위에 새 이미지를 중첩해 여러 이미지 층을 쌓아가며 만들어집니다.
node:14 ->  node 12버전을 base 이미지로 사용한다는 뜻입니다. 

 

COPY

호스트 컴퓨터에 있는 디렉토리나 파일을 docker이미지의 파일 시스템으로 복사합니다.  package.json과 server.js도 복사해줘야 오류가 안납니다. 

 

RUN

이미지 빌드 시 커맨드 실행  ex) pip install , npm install , apk add curl 등 특정 소프트웨어 설치하기 위해 사용합니다.

 

WORKDIR

copy한 파일 중 원래 있던 파일 예로 home, bin 이 이름이 있다면 원래 있던 폴더가 덮어씌여 버린다.. 그리고 모든 파일이 한 디렉토리에 들어가서 보기 안좋습니다.  따라서 work디렉토리를 만들어 애플리케이션 코드는 한번에 관리하겠습니다!

 

WORKDIR /usr/src/app

# WORKDIR /app 으로 간단하게 해도 됨


# 기존 도커파일에 추가 작성하고 다시 빌드
$ docker build -t corgi93/node ./

docker run -it corgi93/node ls  로 다시 검색하면 모든 파일이 나오지 않음.   

WORKDIR로 바로 나오게 됨.  

 

root로 가려면 쉘 접속

docker run -it corgi93/node sh

root로 이동

루트로 이동
cd /

 

쉘 종료하고 싶을 경우 
Ctrl + d 로 종료해줍니다


포트가 안맞을 경우

docker에   <localhost의 포트>:<컨테이너 안의 포트>  로 매핑시켜줘야 합니다. 

 

http://localhost:5000으로 들어가면 매핑 완료! 

 


효율적으로 도커 재빌드하도록 수정

 

아래와 같이 하면 모듈 변화가 있을때만 다시 다운받고, 소스코드 변경시 모듈을 다시 받는 현상을 없애줬습니다. 

docker내부에서 캐싱을 해주고 있는데 소스코드 조금만 수정해도 계속 종속성을 설치함.. (비효율적)

1. package.json 로 의존성 컨테이너 안에 카피

2. npm install 실행

3.  전체 카피

 

이렇게 아래와 같이 수정하면 종속성 변화 있을때만 다시 다운 받아주고 소스코드 변경 시 npm install 싹다 하는 현상이 사라졌습니다.

COPY package.json ./

RUN npm install

COPY ./ ./

 

전체 dockerfile

FROM node:14

WORKDIR /usr/src/app

# 
COPY package.json ./

RUN npm install

COPY ./ ./


CMD ["node" , "server.js"]