node.js

Docker를 이용한 node.js app 배포하기

hoazzinews 2024. 12. 14. 17:20

이번 시간에는 Docker를 이용해서 node.js(express) 애플리케이션을 배포하는 방법에 대해서 알아보겠습니다.

 

1. Dockerfile과 .dockerignore 파일을 만들기

프로젝트 루트에 Dockerfile과 .dockerignore 파일을 만듭니다.

 

Dockerfile

FROM node:20

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --production

COPY . .

ENV NODE_ENV=prod

EXPOSE 3000

CMD ["node", "main.js"]

 - FROM node:20: node.js 버전

 - ENV NODE_ENV=prod: .env 파일 설정

 

.dockerignore

node_modules
Dockerfile
.dockerignore

 

2. 서버에 docker를 설치합니다.
  2-1. 패키지 리스트 업데이트
    $ sudo apt-get update 
  2-2. https 패키지 설치
    $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 
  2-3. docker repository gpg키 설정
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 
  2-4. docker repository 등록
    $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" 
  2-5. 패키지 리스트 업데이트
    $ sudo apt-get update 
  2-6. docker 설치
    $ sudo apt-get install docker-ce 
  2-7. docker 버전 확인
    $ docker --version 

 

docker 설치가 완료됐습니다.

 

3. 빌드 서버에 프로젝트 업로드

 

4. 서버에 docker-image를 만듭니다.
  4-1. Docker-image를 만듭니다.
    $ sudo docker build -t taehoedu/nodedeploy:1.0 . 
    - taehoedu: dockerhub 계정ID
    - nodedeploy: docker-image 이름
    - 1.0: 태그

 

※ 참고. docker build 명령어에서 캐시를 삭제하려면 --no-cache 옵션을 사용할 수 있습니다. 이 옵션은 Docker가 빌드를 할 때 이전 빌드의 캐시를 사용하지 않도록 강제합니다.

    $ sudo docker build --no-cache -t taehoedu/nodedeploy:1.0 . 

 

  4-2. Docker-image 목록을 확인합니다.
    $ sudo docker images 

 

5. Docker-container를 생성해서 node.js app을 실행
    $ sudo docker run --name node -d -p 3000:3000 taehoedu/nodedeploy:1.0 
   - node은 docker-container 이름입니다.

 

6. docker-container 목록을 확인합니다.
  6-1. 실행 중인 docker-container만 목록을 합니다.
    $ sudo docker ps 
 
  6-2. 전체 docker-container 목록을 합니다.
    $ sudo docker ps -a 
 
7. docker-container 중지 및 재실행 합니다.
  7-1. 실행 중인 docker-container 중지
    $ sudo docker stop node 
   - 'node'은 실행 중인 docker-container 이름
 
  7-2. docker-container 재실행
    $ sudo docker start node 
   - 'node'은 docker-container 이름
 
17. docker-container 삭제
    $ sudo docker remove node 
   - 'node'은 docker-container 이름

'node.js' 카테고리의 다른 글

실행 환경에 따른 .env 파일 분리 하는 방법  (0) 2024.12.13