Skip to content

Node.js App 컨테이너

Node.js App 컨테이너화하기 앞서

Node.js App 컨테이너는 Github의 Webhooks 기능을 활용해 jenkins로 자동 배포 + 컨테이너화할 예정입니다. 이 포스트에서는 Node.js App 프로젝트의 구조 및 Dockerfile과 jenkin Shell 스크립트 내용을 다룹니다.

지난 포스트인 Nginx 컨테이너와 동일한 방식으로 배포 때마다 Docker 이미지 빌드, 새 컨테이너가 구동되도록 하였습니다.

Node.js App 프로젝트 구조

node.js
│  .dockerignore
│  Dockerfile
│  index.js

└─node_modules

Node.js App Dockerfile 작성

Node.js App Docker 빌드에 사용될 Dockerfile을 작성합니다.

Dockerfile?

dockerfile
FROM node:16-alpine

WORKDIR /api

COPY . .

RUN npm install

ENV NODE_ENV production

EXPOSE 6081

ENTRYPOINT ["node", "index.js"]
구문설명
FROM node:16-alpinenode:16-alpine 이미지를 바탕으로 Docker 이미지를 생성합니다.
WORKDIR /apiNode.js App 컨테이너 내부 작업 경로를 지정합니다.
COPY . .Node.js App 파일들을 작업 경로로 복사합니다.
RUN npm installNode.js App의 의존성 모듈들을 설치합니다.
ENV NODE_ENV productionNode.js 환경 변수를 production 모드로 지정합니다.
EXPOSE 6081Node.js App 컨테이너가 외부 호스트와 연결될 포트를 명시합니다.
ENTRYPOINT ["node", "index.js"]Node.js App을 구동합니다.

Jenkins Node.js App Shell 설정

Jenkins의 Node.js App 프로젝트 설정으로 이동해 Build StepsExecute Shell을 작성합니다.

shell
cd /var/jenkins_home/workspace/tradurs-back
docker build --no-cache --tag tradurs:back .
docker stop "tradurs-back" || true
docker rm -f "tradurs-back" || true
docker container run --detach --restart always --cpuset-cpus="1" --cpu-shares="2048" --memory="500m" --memory-swap="1g" --publish 6081:6081 --name "tradurs-back" tradurs:back
docker system prune -f
docker buildx prune -f
구문설명
cd /var/jenkins_home/workspace/tradurs-back호스트 볼륨의 Node.js App 작업 경로로 이동합니다.
docker build ...Dockerfile에 작성된 스크립트대로 Docker 이미지를 만듭니다.
docker stop ...기존에 구동 중인 Node.js App 컨테이너를 중지합니다.(없는 경우 true로 통과)
docker rm ...기존에 생성된 Node.js App 컨테이너를 삭제합니다.(없는 경우 true로 통과)
docker container run ...새 Node.js App 이미지를 이용해 컨테이너를 구동합니다.

--detach: 비 연결 구동
--restart : 재시작 설정
--cpuset-cpus : 할당 CPU 번호
--cpu-shares : 할당 CPU 상대적 가중치
--memory : 메모리 한도
--memory-swap : 스왑 메모리 한도
--publish : 호스트에 게시되는 포트 정의(외부:내부)
--name : 컨테이너 이름
docker system prune -fDocker 이미지 및 컨테이너를 정리합니다.
docker buildx prune -fDocker 빌드 캐시를 정리합니다.

마지막으로 Node.js App의 소스를 git push 하여 Jenkins를 통해 정상적으로 자동 배포되는지 확인하면 됩니다.

Made with VitePress.