우노
[Docker] AWS EC2에서 Docker를 이용한 Nodejs 웹서버 구축 본문
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
"이라는 텍스트로 시스템의 호스트 이름을 응답합니다.
- 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번 포트로 접속해 통신을 확인한다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker를 이용한 MySQL 설치 및 접속 (0) | 2020.11.08 |
---|---|
[Docker] Dockerfile 개념 및 작성법 (1) | 2020.10.06 |
[Docker] AWS EC2에서 Docker를 이용한 Apache 웹서버 구축 (2) | 2020.10.03 |
[Docker] Image 생성 및 삭제 (0) | 2020.07.16 |
[Docker] Container 생성, 접속, 삭제 (0) | 2020.07.16 |