오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-05 00:02
관리 메뉴

우노

[Docker] AWS EC2에서 Docker를 이용한 Nodejs 웹서버 구축 본문

DevOps/Docker

[Docker] AWS EC2에서 Docker를 이용한 Nodejs 웹서버 구축

운호(Noah) 2020. 10. 4. 16:50

AWS란?

  • AWS(Amazon Web Service)는 아마존닷컴의 클라우딩 컴퓨팅 사업부이다. 현재 클라우드 분야에서 세계1위의 점유율을 차지하고 있다.
  • 간단하게 말하자면 컴퓨터의 모든 기능을 AWS를 이용해 직접 서버나 컴퓨터를 구매하지 않고 간단하게 구현할 수 있다.

EC2란?

  • Elastic Compute Cloud — 줄여서 EC2라고 한다.
  • EC2는 AWS 서비스의 핵심으로써 사용자는 아마존의 가상컴퓨터를 임대받아 그 위에 자신만의 컴퓨터 프로그램을 실행해 원하는 기능을 컴퓨터를 따로 살 필요 없이 필요한 성능, 용량만큼 간단하게 구축할 수 있다.
  • 이 서비스는 CPU사용량(연산횟수)으로 결제하는 것이 아닌 인스턴스를 켜 놓은 시간을 기준으로 결제하는 구조다.

EC2 인스턴스 생성

  • AWS 에 접속 후 지역은 Asia Pacific(Tokyo) ap-northeast-1 로 설정

  • AWS EC2 콘솔로 들어가 인스턴스 시작을 눌러 인스턴스 생성을 시작한다.

  • AMI 선택

    • 인스턴스를 시작하는 최초의 설정(운영체제, 애플리케이션 서버, 애플리케이션)을 의미하며 이를 이미지라고 한다.
    • Amazon Linux 2 AMI (HVM), SSD Volume Type 를 선택한다.
  • 인스턴스 유형 선택

    • 프리티어인 t2.micro 선택
  • 인스턴스 세부 정보 구성

    • 따로 건드릴 옵션이 없다면 넘어간다.
  • 스토리지 추가

    • 만약 당신이 더 많은 저장 공간이 필요하다면 초기설정보다 크기를 더 늘려주면 된다.
    • 하지만 우리가 만들 인스턴스는 많은 저장 공간이 필요 없으므로 그냥 넘어간다.
  • 태그 추가

    • 인스턴스가 어떤 역할인지 누가 관리하는지 메모해 두는 것이다.
    • 필요 없다면 넘어간다.
  • 보안 그룹 구성

    • 인스턴스의 트래픽을 제어하는 방화벽 규칙을 구성하는 단계이다.
    • Default로는 SSH 22번 포트가 열려 있다.
    • 외부에서 EC2 Instance로 접근 가능하도록 포트를 추가로 열어준다.
      • Type : HTTP
      • Port range : 80
      • Source : Anywhere
    • 인스턴스 생성 후에도 수정이 가능하다.
    • 설명 작성 시 한글이면 인스턴스 생성이 안 되니 꼭 영어로 작성해주자.
  • 키페어 생성

    • 마지막으로 이 인스턴스의 비밀번호와 같은 키 페어를 지정 해준다.
    • 기존에 존재하는 키페어를 사용하거나 새로 생성할 수 있다.
    • pem key는 인스턴스에 접속 할 수 있는 유일한 키이므로 자신이 잘 기억하고 관리할 수 있는 공간에 저장해 둔다.
    • 재발급의 과정이 매우 복잡하니 꼭 잘 관리하자.
    • 이 인스턴스에 접근 할 때 필요한 키 페어를 지정 한 후 인스턴스를 시작하면 인스턴스가 구동되기 시작한다.

EC2 Instance 접속

  • EC2 Instance에 접속하는 방법은 EC2 Instance Connect, Session Manager, SSH Client가 있다.

  • SSH Client로 접속

    • SSH 클라이언트를 엽니다.

    • 인스턴스 생성 시 발급한 개인 키 파일을 찾습니다.

    • 개인 키 파일의 권한을 수정합니다.

        chmod 400 capstone.pem
    • 개인키와 Public DNS를 사용하여 인스턴스에 연결합니다.

        ssh -i "capstone.pem" ec2-user@ec2-54-168-186-158.ap-northeast-1.compute.amazonaws.com
  • 패키지 업데이트

      sudo yum update -y

Docker 설치 및 실행

  • Docker 설치

    • 아래 명령 실행 후 재접속

        sudo yum update -y
      
        sudo yum install docker -y
      
        sudo service docker start
      
        sudo usermod -a -G docker ec2-user
  • Docker 설치 확인

    • 설치되어 있는 이미지 확인

        docker search ubuntu

Node.js 파일 및 Dockerfile 작성

  • Container는 Dockerfile → image → container 의 구조로 생성됩니다.

  • Node.js, Dockerfile을 담을 디렉토리 생성

      cd ~
      mkdir nodejs
      cd nodejs
  • app.js 파일 작성

      vim app.js
      const http = require('http'); 
      const os = require('os');
    
      console.log("Kubia server starting...");
    
      var handler = function(request, response) {
          console.log("Received request from " + request.connection.remoteAddress); 
          response.writeHead(200);
          response.end("You've hit " + os.hostname() + "\n");
      };
    
      var www = http.createServer(handler); 
      www.listen(80);
    • Node 앱 서버는 모든 요청에 대해 HTTP 응답 상태 코드 200 OK와 "You 've hit "이라는 텍스트로 시스템의 호스트 이름을 응답합니다.
  • Dockerfile 작성

    • 도커파일은 항상 Dockerfile이라는 이름을 가지고 있어야합니다.

        vim Dockerfile
    • Dockerfile 작성

      • FROM node:7 는 node.js 실행환경을 위해 node라는 이미지를 상속 받는다는 뜻이다.

          FROM node:7
          ADD app.js /app.js
          ENTRYPOINT ["node", "app.js"]
  • 작성한 Dockerfile 를 image로 빌드

    • docker image의 이름은 nodejsimage이고 현재 경로(.) 에서 수행하도록 합니다.

        docker build -t nodejsimage .
  • image 빌드 확인

    • docker images 명령어를 통해 확인합니다.

        docker images

image 로 Container 생성

  • image로 Container 생성 시 EC2 Instance의 포트와 Container 포트를 연결해줄 필요가 있습니다.

    • 포트 할당 옵션 구조

        -p {hostPort}:{container port}
  • http로 80번 hostport에 들어오면 80번 포트 컨테이너로 연결해준다.

      docker run --name nodejs-container -p 80:80 nodejsimage
  • 재접속 후 container 동작 확인

      docker ps

통신 확인

  • EC2 Instance 의 Public DNS를 80번 포트로 접속해 통신을 확인한다.
Comments