DevOps

Docker를 이용하여 EC2에 Node 서버 배포하기 (1)

MIRACLE LIFE 2026. 4. 28. 17:01

Node 서버를 운영하다 보면 다음과 같은 문제들이 생길 수 있다.

  • 배포를 했더니 개발 환경과 운영 환경이 같지 않아서 문제가 발생한다.
  • 다른 개발자와의 개발 환경이 달라 충돌이 발생한다.
  • 가끔 패키지 관련 문제로 인해 서버 실행이 안 된다.

이 글에서는 이런 문제를 해결하기 위해
Docker → ECR → EC2 흐름으로
Node 서버를 배포하는 과정을 진행한다.

 

 

전체 흐름은 아래와 같다.

  1. Docker 이미지 빌드
  2. AWS ECR에 이미지 Push
  3. EC2에서 이미지 Pull
  4. Docker로 컨테이너 실행

Docker 이미지 빌드

Docker 이미지를 빌드하기 위해서는 Dockerfile이란 이름을 가진 파일이 필요하다. 아래와 같은 Dockerfile을 작성한다. 

 

Dockerfile

FROM node:24-alpine

WORKDIR /app

# 의존성 먼저 복사 (캐시 활용)
# 소스 코드가 바뀌어도 package.json이 그대로면
# 해당 레이어는 캐시를 재사용할 수 있음
COPY package*.json ./

RUN npm install

# 컨테이너가 사용할 포트
EXPOSE 3000

# 컨테이너 시작 시 실행할 기본 명렁
CMD ["node", "dist/main"]

작성한 Dockerfile을 빌드한다.

docker build -t sample .

빌드가 완료되면 이미지가 정상적으로 생성되었는지 확인한다.

docker images

 

목록에 sample이 보이면 이미지가 정상적으로 생성된 것이다.


이미지를 만들었으면, 실제로 서버가 잘 뜨는지 확인해보자.

 

컨테이너 실행

docker run -d -p 3000:3000 --name sample-app sample
  • -d: 백그라운드 실행
  • -p 3000:3000: 로컬 3000 포트를 컨테이너 3000 포트와 연결
  • --name sample-app: 컨테이너 이름 지정

실행 확인

docker ps

 


AWS ECR에 이미지 Push

이제 이미지를 서버에 전달해야 한다. 그 역할을 하는게 ECR이다.

 

ECR(Elastic Container Registry)이란?

- Docker Hub 같은 Docker 이미지 저장소

 

먼저 AWS console의 ECR에서 리포지토리를 생성한다.

해당 리포지토리에 이미지를 전달한다.

 

로그인

aws ecr get-login-password --region ap-northeast-2 \
| docker login \
--username AWS \
--password-stdin {ECR_URI}

 

이미지 태깅

docker tag sample:latest {ECR_URI}:latest

 

이미지 푸시

docker push {ECR_URI}:latest

 

ECR 리포지토리의 이미지 목록에 나타난다면 잘 된 것이다.

 


EC2에서 이미지 Pull

이제 ECR에 있는 이미지를 가져올 것이다.

 

로그인

aws ecr get-login-password --region ap-northeast-2 \
| docker login \
--username AWS \
--password-stdin {ECR_URI}

 

이미지 다운로드

docker pull {ECR_URI}:latest

 

이미지가 정상적으로 내려받아졌는지 확인해보자.

docker images

 


Docker로 컨테이너 실행

 

컨테이너 실행

docker run -d -p 3000:3000 --name sample-app {ECR_URI}:latest

 

실행 확인

docker ps

 

컨테이너 목록에 sample-app이 보이면 정상이다.

보안 그룹에서 3000 포트를 열었다면 브라우저에서 아래 주소로 확인할 수 있다.

http://EC2_PUBLIC_IP:3000

 


마무리

이 글에서는

"서버를 Docker 이미지로 만들고,

AWS ECR에 올리고,

EC2에서 이미지를 가져와 실행했다."

다음 글에서는 GitHub Actions를 사용하여 자동 배포가 이루어질 수 있도록 할 것이다.