Notice
Recent Posts
Recent Comments
Link
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 개발 일상 기록

[Docker] Docker를 이용한 간단한 Node.js 어플 만들기_2 본문

Docker

[Docker] Docker를 이용한 간단한 Node.js 어플 만들기_2

느린 거북이 2021. 7. 14. 17:31

Docker를 이용한 간단한 Node.js 어플 만들기

 

1. Dockerfile 작성하기

# 베이스 이미지를 명시해줍니다.
FROM node:10

# 추가적으로 필요한 파일들을 다운로드 받습니다.
RUN npm install

# 컨테이너 시작 시 실행 될 명령어를 명시해줍니다.
CMD ["node", "server.js"]

npm install이란?

  • npm은 Node.js로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 프로그램입니다.
  • npm install은 package.json에 적혀있는 종속성들을 웹에서 자동으로 다운 받아서 설치해주는 명령어입니다.
  • 결론적으로 현재 Node.js앱을 만들때 필요한 모듈들을 다운받아 설치하는 역할을 합니다.

* package.js 및 server.js 파일이 없다고 나오는 경우

아래의 그림처럼 docker run이나 build 하였을 경우 에러가 나는 경우가 생깁니다.

package.js, server.js 파일들이 컨테이너 안에 없기에 찾을 수 없다는 에러가 발생하게 됩니다. 이러한 문제를 해결하기 위해서는 'COPY package.js ./' 방식을 이용하여 파일들을 컨테이너 안으로 넣어주어야 합니다. 아래의 그림처럼 'COPY ./ ./' 방식을 이용한다면 현재 디렉토리에 있는 파일 전부를 컨테이너에 넣어주게 됩니다.

 

2. 이미지 생성 후 어플리케이션 확인

 

  • 서버를 run 하였을 경우 터미널에 실행을 확인하기 위해서 server.js파일에 console.log("Server is running")을 추가합니다.

  • 'docker biild -t 네임밍 ./' 명령어를 통해 이미지를 생성합니다.

  • docker run 네임밍 명령어를 실행하게 되면 터미널에 server.js파일에 추가한 "Server is running"이 표시됩니다.

* 브라우저로 어플리케이션 실행 상태 확인하기

 

브라우저에서 localhost:8080 으로 접속 하면 연결할 수 없다고 나옵니다.

아래의 명령어를 통해 docker를 실행하면 해결이 가능합니다.

  • 이미지를 만들때 로컬에 있던 파일(package.json)등을 컨테니어네 복사 해주는 것과 비슷하게 네트워크도 로컬 네트워크에 있던 것을 컨테이너 내부에 있는 네트워크에 연결을 시켜주어야 합니다.

 

지정한 포트로 접속을 하면 어플리케이션이 실행된 것을 확인할 수 있습니다.

 

 

3. Working Directory 명시해주기

 

workdir를 지정하지 않고 그냥 COPY할때 생기는 문제점

  • 베이스 이미지에 이미 home이라는 폴더가 있고 COPY를 하므로 새로 추가 되는 폴더 중에 home이라는 폴더가 있다면 중복이 되므로 원래있던 폴더가 덮어씌어져 버린다.
  • 모든 파일이 한 디렉토리에 들어가 버리니 너무 정리 정돈이 안되어있다.
  • 그래서 모든 어플리케이션을 위한 소스들은 WORK 디렉토리를 따로 만들어서 보관한다.

도커파일에 WORKDIR을 추가해줍니다.

# 베이스 이미지를 명시해줍니다.
FROM node:10

# 이미지안에서 어플리케이션 소스 코드를 갖고있을 디렉토리를 생성합니다.
WORKDIR /user/src/app

# 컨테이너 안으로 넣어주는 작업입니다.
COPY ./ ./

# 추가적으로 필요한 파일들을 다운로드 받습니다.
RUN npm install

# 컨테이너 시작 시 실행 될 명령어를 명시해줍니다.
CMD ["node", "server.js"]

 

도커파일에 추가 후 다시 이미지를 생성 후 디렉토리를 확인합니다.

 

4. Docker Volume

 

소스를 변경할때마다 변경된 소스 부분은 COPY한 후 이미지를 다시 빌드를 해주고 컨테이너를 다시 실행해줘야지 변경된 소스가 화면에 반영이 됩니다. 이러한 작업은 너무나 시간 소요가 크며 이미지도 너무나 많이 빌드하게 됩니다. 이러한 문제점을 해결하기 위해서 Volume을 사용하게 됩니다.

 

COPY

Volume

 

Volume 사용해서 어플리케이션 실행하는 법

  • -v /usr/src/app/node_modules : 호스트 디렉토리에 node_module은 없기에 컨테이너에 맵핑을 하지 말라고 하는 것을 의미합니다.
  • -v $(pwd):/usr/src/app (Mac OS) 
  • -v cd:/usr/src/app (Window) : cd 경로에 있는 디렉토리 혹은 파일을 /usr/src/app 경로에서 참조하는 것을 의미합니다.

* /usr/src/app 부부은 도커파일에 WORKDIR 지정된 경로를 기입하면 됩니다.

 

 

Comments