카테고리 없음

[따라하며 배우는 도커와 CI환경] 도커에서 Node.js 어플 만들기, Docker Volume

bona.0 2023. 1. 24. 22:29

본 포스팅은 인프런에서 강의하시는 John Ahn님의 '따라하며 배우는 도커와 CI환경'이라는 강의를 보며

제가 이해한 내용을 정리하는 포스팅입니다. 

 

🙌 도커 컨테이너 안에서 기본적인 Node.js 앱을 실행해보자

 

  • 우선 Node.js 앱을 생성하자.
    • package.json: 프로젝트의 정보와, 패키지 의존성을 관리하는 곳
    • server.js: 시작점으로서 가장 먼저 실행되는 파일

 

// server.js
const express = require('express');

const PORT = 8080; // 포트 지정

//APP 
const app = express();
app.get('/', (req,res) => {
    res.send("반가워요!!!!!!!")
});

app.listen(PORT);
console.log("Server is running")

 

 

Nodejs앱을 도커 환경에서 실행시키는 순서

1. 도커 파일 작성

  • alpine 이미지는 아주 경량화된 이미지이고,  npm 패키지가 들어있지 않다. 따라서  node 베이스 이미지를 사용해야함.
    • ❔ npm install: 
      • package.json에 적혀있는 종속성들을 웹에서 자동으로 다운받아서 설치해주는 명령어
  • ✔ 컨테이너 안에 package.json 을 넣어줘야 함: [c]COPY 복사할_로컬파일경로 컨테이너_내부에_파일이_복사될 경로[\c]
  • ✔ WORKDIR 생성
    • WORKDIR: 이미지 안에서 소스코드를  가지고 있을 디렉토리를 생성하는 것
    • [c]WORKDIR /usr/src/app[\c]

 

2. 도커 이미지 생성

 

3. 도커 컨테이너 실행, nodejs앱 실행

  • ✅로컬 네트워크와  컨테이너 내부에 있는 네트워크와 연결을 해주어야 한다.
    • 로컬호스트 네트워크 5000
    • 컨테이너 내부의 네트워크 포트 8080
    • [c]docker run -p  5000:8080 이미지_이름[\c]
    • 브라우저에서 localhost:5000 으로 접근 
// Dockerfile

// 베이스 이미지: node
FROM node:10

WORKDIR /usr/src/app

// 컨테이너 안에 package.json 을 넣기
COPY package.json ./ 

// package.json에 명시된 패키지들 설치
RUN npm install

// 컨테이너 안에 현재 디렉토리에 있는 모든 파일들을 넣기(package.json, server.js ..)
COPY ./ ./


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

 

 

어플리케이션 소스코드 변경시 효율적으로 재빌드하는 법

  • dockerfile에서 소스코드 copy를 npm install 이후에 해줘야함. 그래야지 모듈들은 캐싱을 사용해서 재다운이 되지 않음
    1. COPY package.json
    2. RUN npm install 
    3. COPT ./ ./

 

Docker Volume

  • 도커 컨테이너가 로컬의 파일들을 계속 참조에서 변경사항이 바로 반영되도록 하는 것
  • [c]docker run -p 5000:8080 -v /usr/src/app/node_modules -v %cd%:/usr/src/app <이미지 아이디>[\c]
    • -v /usr/src/app/node_modules: 호스트에는 node_modules 디렉토리가 없기 때문에  node_modules는 로컬에 맵핑하지 말라고 하는 것
    • -v %cd%:/usr/src/app: 컨테이너의 /usr/src/app에서 로컬의 %cd%를 맵핑