본문 바로가기

node.js

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

이번 시간에는 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' 카테고리의 다른 글