본문 바로가기

STUDY/Docker & Kubernetes: 실전 가이드 -2022년판

14. 도커 배포 프로세스: AWS EC2 활용

NodeJS App 배포해보기

 

위와같이 단순한 화면을 출력하는 NodeJS 앱을 도커로 배포해보려고한다. 먼저 개발환경(로컬)에서 소스를 바탕으로 도커 이미지를 빌드하고 그 이미지를 도커 이미지 레지스트리(도커 허브)에 업로드 할 것이다. 그리고 배포환경(EC2)에서 해당 이미지를 가져오고 컨테이너를 실행하여 사용자에게 서비스를 제공하는 것을 목표로 한다.

 

 


이미지 생성 및 업로드

 

도커 배포를 위해서는 도커 이미지 레지스트리에 이미지를 업로드 해야 한다. 이를 위해서 도커 허브에 my-nodejs-app 이름의 이미지 레포지토리를 생성하였다. 

 

// .dockerignore 파일
node_modules
Dockerfile

 

> docker build -t my-nodejs-app .
> docker tag my-nodejs-app nankisu/my-nodejs-app
> docker images
REPOSITORY                           TAG       IMAGE ID       CREATED          SIZE
nankisu/my-nodejs-app                latest    565533220608   12 minutes ago   127MB
my-nodejs-app                        latest    565533220608   12 minutes ago   127MB
...
> docker login
...
> docker push nankisu/my-nodejs-app

불필요한 파일이 이미지에 포함되는것을 막기위해 .dockerignore 파일을 작성한 후, my-nodejs-app 이미지를 빌드하였다. 그리고 해당 이미지를 도커 허브 레포지토리에 맞도록 nankisu/my-nodejs-app 이라는 이름으로 복사하였다. docker images를 입력해보면 두개의 이미지가 있는것을 확인할 수 있다. 그리고 docker login 이후 docker push 명령어를 수행하면 이미지가 업로드되는것을 볼 수 있다.

 

 

 


배포용 EC2 생성 및 접속

 

 

도커 허브에 업로드한 이미지를 가져와서 컨테이너를 실행할 EC2 인스턴스를 생성하였다. 그리고 생성된 인스턴스에 적용되는 보안 그룹을 설정해주었다. 인스턴스에서 실행될 NodeJS App은 80번 포트로 실행이 되므로 80번포트로의 접속을 허용해주었다.

 

> sudo apt-get update
> sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
> sudo mkdir -p /etc/apt/keyrings
> curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
> echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
> sudo apt-get update
> sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
> sudo docker run -d --rm -p 80:80 nankisu/my-nodejs-app

그리고 인스턴스에 접속하여 도커를 설치해주었다. 각 운영체제별 도커 설치 방법은 도커 공식 홈페이지에 자세하게 설명되어있다 (https://docs.docker.com/engine/install/ubuntu/.) 설치가 끝나고 docker run 명령어로 업로드한 이미지를 컨테이너로 실행하면 끝이다. 이제 브라우져에서 EC2 인스턴스IP:80 으로 접속해보면 NodeJS App이 나오는것을 볼 수 있다.

 

728x90