본문 바로가기

Container/Docker

[Docekr]Node.js 웹 앱을 도커라이징 해보자

공식문서를 참고하여 찬찬히 따라해본다.

 

Node.js 앱 생성

  • package.json 파일을 생성하고 내용을 넣는다.
  • npm install을 통해 의존성을 설치한다.
    • 이 때 설치되는 것은 명시되어 있는대로 "express": "^4.16.1"이다.
    • package-lock.json이 생성되었다면 성공적으로 설치된 것이다.
  • server.js를 만든다.

 

Dockerfile 생성

FROM node:12

# 앱 디렉터리 생성
WORKDIR /usr/src/app

# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./

RUN npm install
# 프로덕션을 위한 코드를 빌드하는 경우
# RUN npm ci --only=production

# 앱 소스 추가
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]
  • COPY . .
    • Dockerfile이 있는 디렉토리의 모든 파일들을(.) 컨테이너의 디렉토리에(.) 복사한다.
  • EXPOSE 8080
    • 앱이 8080포트에 바인딩 되어 있으므로 EXPOSE 지시어를 사용해서 docker 데몬에 매핑한다?
  • CMD [ "node", "server.js" ]
    • 터미널에 node server.js를 치면 서버가 실행되듯, node server.js를 실행하는 명령어다.

 

.dockerignore

  • .gitignore와 마찬가지로 dockerignore에 있는 파일들은 컨테이너에 추가되지 않는다.

 

이미지 빌드

  • 빌드를 한다.
docker build . -t <your username>/node-web-app

Dockerfile에 작성한 순서대로 작업이 진행되는 것이 보인다.

 

  • 빌드된 이미지를 확인해본다.
docker images

 

이미지 실행

  • 이미지를 컨테이너로 실행한다. 앱이 8080에 바인딩되어 있으므로 명령어는 다음과 같다.
docker run -p 49160:8080 -d <your username>/node-web-app
  • 실행중인 container id나 names를 확인한다.
docker ps
  • 로그를 출력하여 정상 작동하는지 확인한다.
docker logs <container id 혹은 names>
  • 잘 작동안되면 직접 컨테이너에 들어가서 확인해보자.
docker exec -it <container id 혹은 names> bash

 

테스트

  • 직접 방문해보자. localhost:49160
  • curl 날려보자!
curl -i localhost:49160
  • 모든 실습이 완료되었으면 컨테이너를 없애보자! 먼저 stop으로 멈추고 rm으로 제거할 것이다.
docker stop <container id 혹은 names>
docker rm <container id 혹은 names>