목표
github에는 내 webapp프로젝트가 있고, dockerhub에는 내 webapp이 실행될 수 있는 container image가 있으니까
aws ec2에서 내 container image를 pull & run 해서 접속해보고,
언제든 ec2 instance를 시작해서 내 container image를 가지고 pull & run만 하면 서버가 구동될 수 있는 상태의 snapshot을 ami로 저장해두기
이렇게 하면 작업하던 ec2 instance를 종료해도 저장된ami로 언제든 컨테이너를 쉽게 띄울 수 있는 환경의 ec2 instance가 시작될 수 있다.
준비사항
- amazon linux 2023 EC2 instance connect 연결
- ec2 기존 보안 규칙에 더해 보안 규칙 임시로 ssh 포트 모든 ip에서 허용
- docker hub에 띄울 컨테이너 이미지 push되어있는 상태
이미 되어있어야 할 준비사항을 그림으로 표현하자면
위의 사진의 1,2,3,4의 과정이 모두 되어있어야 한다.
1,2,3,4의 과정이 모두 준비되어있다면
위 사진의 5번에서, ec2 isntance에서 docker run을 해보고,
언제든지 내 ami로 ec2를 시작하여 서버를 구동할 수 있도록 할 것이다.
aws linux 2023에 docker 설치
aws linux 2023 ec2 instance에 instance connect 방식으로 연결하면 콘솔창에 이런 식으로 뜰 것이다.
반가운 새
도커를 설치해보자
도커 설치 명령어
# sudo yum install docker -y
설치 완료 후 테스트해보자
# docker run hello-world
위 명령어를 입력한 결과 아래 사진처럼 Hello from Docker! 라고 반갑게 인사해주면 정상적으로 설치된 것
docker hub 에서 내 컨테이너 이미지를 run하기위해 docker login 명령으로 docker hub에 로그인하자
#docker login
{input username}
{input password}
docker run
# docker run -it -d -p {ec2접속 port}:{container 접속 port} {dockerhub name}/{repository}:{tag}
나의 경우에는 docker run -it -d --name tt -p 80:8080 byeongryeol/hanghaeeats:1.1 로 실행했다.
-p 옵션을 조금 부연 설명하면,
ec2 접속은 80포트를 허용하고, 컨테이너에서 내 웹앱 서버가 8080으로 구동되고있으므로, 포트포워딩 해준것
위와같이 입력하면 repository에 있는 image를 pull해오는 작업이 시작될 것이다.
이제 instance connect 창의 아래 사진과 같은 부분에서 public ip를 찾아서
local에서 주소창에 {ec2의 public ip}:80 을 입력하면 접속할 수 있다.
이 상태를 저장하기위해서는 ec2 instance 탭으로 이동해서,
현재 상태를 스냅샷으로 찍어서 ami로 저장하면 된다.
저장 확인은 이미지 탭 → AMI 메뉴에서 할 수 있다.
이제 방금 작업한 ec2 인스턴스를 완전히 종료하여 ebs 루트볼륨이 삭제되더라도, 내 이미지로 instance를 시작한 경우 단순히 아래 명령어를 입력하는 것 만으로 서버를 열 수 있다.
# docker run -it -d -p {ec2접속 port}:{container 접속 port} {dockerhub name}/{repository}:{tag}