본문 바로가기

Infla/Docker

1. [Seminar] Dockerfile 실습 - NodeJS Dockerfile 작성하기

# 베이스 이미지를 명시
FROM node:10 

COPY package*.json ./

# 추가적으로 필요한 파일들을 다운
RUN npm install

# 소스 복사해서 컨테이너로 넣기
COPY . .

EXPOSE 3000

# 컨테이너 시작시 실행 될 명령어를 명시
CMD["node", "index.js"]

npm Install

- npm은 Node.js로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 프로그램

- npm install은 package.json에 적혀있는 종속성들을 웹에서 자동으로 다운 받아서 설치해주는 명령어

 

결론적으로는 현재 노드 js앱을 만들때 필요한 모듈들을 다운받아 설치하는 역할

 

 

 

COPY package*.json ./ 하는 이유

npm install을 실행할때 어플맄네이션에 필요한 종속성을 다운받는데

새로 생성된 package.json이 없으면 에러 발생

 

 

Working Directory 명시

도커 파일에 WORKDIR /usr/src/app 추가

 

명시를 안하고 Copy를 했을시 문제점

1. 베이스 이미지에 이미 home이라는 폴더가 있고

   Copy를 하므로서 새로 추가 되는 폴더중에 home이라는 폴더가 있으면 덮어씌어져 버림

 

2. 한 디렉토리 안에 파일이 다 들어가서 정돈이 안된다.

 

 

Docker Volume

간단한 Html 소스를 변경했는데 다시 이미지를 만들고 컨테이너 생성 및 실행

-> 프로젝트가 커지면 너무 큰 번거로움이 있음

-> docker volume을 사용하게 되면 해결

docker run -p 80:3000 -v /usr/src/app/node_modules -v $(pwd):/usr/src/app <이미지>

 

-v /usr/src/app/node_modules: 호스트 디렉토리에 node_modules는 없기에 컨테이너에서 매핑을 하지 말라고 하는 것

$(pwd):/usr/src/app pwd 경로에 있는 디렉토리 혹은 파일을 /usr/src/app 경로에서 참조