AWS EC2 인스턴스에서 Docker 컨테이너를 실행하고 웹 애플리케이션을 배포하는 방법에 대해 설명합니다. 이 과정에서는 EC2 인스턴스를 생성하고, Docker를 설치하며, Docker Hub에서 컨테이너를 다운로드하고 실행하는 방법을 다룹니다.
nginx를 EC2에 배포하는 기본적인 가이드와, EC2에 도커 컨테이너를 실행한 후기로 구성했습니다.
1. AWS EC2 인스턴스 생성
- 1. AWS Management Console에 로그인 후 EC2 서비스로 이동합니다.
- 2. "인스턴스 생성" 버튼을 클릭하여 새로운 EC2 인스턴스를 생성합니다.
- t2.micro 인스턴스를 선택하여 무료 사용 범위 내에서 진행합니다.
- 키 페어를 생성하거나 기존 키를 선택하여 SSH 접속에 사용할 수 있도록 합니다.
- 보안 그룹에서 HTTP(80)와 SSH(22) 포트를 열어줍니다.
- 3. 인스턴스를 시작한 후, 퍼블릭 IP를 확인하고 SSH를 통해 EC2 인스턴스에 접속합니다:
ssh -i "your-key.pem" ec2-user@your-ec2-public-ip
2. EC2에 필요한 구성요소 설치
EC2 인스턴스에 Docker와 기타 필요한 패키지들을 설치합니다.
- 1. 패키지 업데이트:
sudo yum update -y
- 2. Docker 설치:
sudo amazon-linux-extras enable docker
sudo yum install docker -y
- 3. Docker 서비스 시작:
sudo service docker start
- 4. Docker가 부팅 시 자동으로 시작되도록 설정:
sudo systemctl enable docker
- 5. EC2 사용자에게 Docker 권한 부여:
sudo usermod -aG docker ec2-user
- 아래 명령어는 ec2-user가 Docker 명령을 실행할 수 있도록 설정합니다. 변경 사항을 적용하려면 로그아웃 후 다시 로그인해야 합니다.
exit
ssh -i "your-key.pem" ec2-user@your-ec2-public-ip
3. Docker Hub에 로그인
Docker Hub에서 이미지를 다운로드하려면 먼저 로그인해야 합니다. Docker Hub 계정이 없다면 Docker Hub 사이트[https://hub.docker.com/]에서 회원 가입 후 로그인합니다.
- Docker Hub 로그인:
sudo docker login
4. Docker 컨테이너 다운로드
이제 Docker Hub에서 원하는 이미지를 다운로드합니다. 예를 들어, nginx 이미지를 다운로드하는 방법은 아래와 같습니다.
- Docker 이미지 다운로드:
sudo docker pull nginx
이 명령어는 nginx 이미지를 Docker Hub에서 EC2 인스턴스로 다운로드합니다.
5. Docker 컨테이너 실행
이미지를 다운로드한 후에는 Docker 컨테이너를 실행할 수 있습니다. EC2에서 nginx 컨테이너를 실행하는 예시는 아래와 같습니다:
- 1. 컨테이너 실행:
sudo docker run -d -p 8080:80 nginx
- -d: 컨테이너를 백그라운드 모드로 실행
- -p 8080:80: EC2의 8080 포트와 컨테이너의 80 포트를 매핑
- 2. 실행 중인 컨테이너 확인:
sudo docker ps
6. 브라우저에서 접속하여 정상적으로 배포되었는지 확인
- EC2 인스턴스의 퍼블릭 IP와 포트 8080으로 접속하여 nginx가 정상적으로 실행되고 있는지 확인합니다:
http://your-ec2-public-ip:8080
nginx의 기본 웹 페이지가 표시되면 성공적으로 Docker 컨테이너가 실행된 것입니다.
위의 단계들을 통해 EC2에서 Docker 컨테이너를 실행하고, 웹 애플리케이션을 성공적으로 배포할 수 있습니다. 이제 Docker를 사용하여 애플리케이션을 효율적으로 배포하고 관리할 수 있습니다.
# 실습에 사용한 코드는 이렇습니다 :
# 1. 패키지 업데이트
sudo apt update
sudo apt upgrade -y
# 2. 필수 패키지 설치
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 3. Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 4. Docker 저장소 추가
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. Docker 설치
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 6. Docker 실행 확인
sudo systemctl start docker
sudo systemctl enable docker
docker --version
# 도커HUB에서 컨테이너 다운로드
docker pull rakaso598/my-node-app:latest
docker pull rakaso598/springboot-app:latest
# 도커 컨테이너 개별 실행
sudo docker run -d -p 8080:8080 --name springboot-app rakaso598/springboot-app:latest
sudo docker run -d -p 3000:3000 --name my-node-app rakaso598/my-node-app:latest
에러의 원인은 스프링 부트 내부 코드에서 localhost:8080으로 설정된 부분이 AWS의 퍼블릭 IP 주소와 다르게 작성되어, 통신이 원활하게 이루어지지 않았기 때문으로 보입니다.
이와 같이, EC2 서버에 도커를 설치하고, 도커허브에서 컨테이너를 내려받아 실행한 후, 퍼블릭 IP 주소로 배포하는 과정을 체험해 보았습니다.
'Cloud' 카테고리의 다른 글
카페24 워드프레스 호스팅 구입 및 배포하기 [SaaS] (0) | 2024.12.15 |
---|---|
GitHub Pages에서 직접 외부API를 사용하는건 힘들다 [AWS/탐구] (1) | 2024.10.15 |
아마존 AWS Lambda, API Gateway 설정하기 [후기] (1) | 2024.10.15 |
깃허브 페이지와 서버리스로 페이팔 결제서비스 가능할까? [AWS/탐구] (0) | 2024.10.14 |
AWS EC2에 스프링부트 첫 배포한 후기 [RDS/MySql] (0) | 2024.09.30 |