본문 바로가기
CI | CD

[Docker + AWS + RDS] EC2에 Docker 컨테이너 띄우기

by ♡˖GYURI˖♡ 2024. 7. 12.
728x90

1. RDS 인스턴스 생성

참고

 

 

[Web] 최종프로젝트(11)AWS EC2 RDS MySQL연결

AWS RDS 대시보드 이동한다.데이터베이스 생성Amazon RDS의 MySQL 버전 결정에 참고자료현 서비스로 배포 목적이 아니지만 최신 버전 중 연장가능성 고려하여 2023년 6월월까지 제공되는MySQL 8.0.28 버전

velog.io

 

AWS RDS Free Tier 생성 방법 (MariaDB)

💡 RDS란 AWS RDS는 Amazon Web Services (AWS)에서 제공하는 관계형 데이터베이스 서비스(Relational Database Service)다. 이 서비스를 사용하면 사용자는 데이터베이스 관리 작업의 복잡성을 줄이고 애플리케

velog.io

 

AWS RDS 구축하기 후 DataGrip으로 외부에서 접속하기

웹서버가 견딜 수 있는 능력치가 정해져 있으므로 서버와 데이터베이스를 분리해서 운영하는 것이 효과적이다. 데이터베이스와 서버 분리 시 장점은 다음과 같다. 확장성 보안성 백업 관련 이

velog.io

 

 

2. Datagrip에서 RDS 연결 테스트

 

Name : 원하는 DB명 @ RDS 인스턴스 EndPoint
Host : RDS 인스턴스 EndPoint (RDS > Databases > 원하는 RDS 인스턴스 클릭 > Connectivity & security)
User : RDS 생성 시 설정한 유저명

Password : RDS 생성 시 설정한 비밀번호

 

Test Connection 성공 확인

 

 

3. Gradle > bootJar을 통해 .jar 파일 만들기

 

 

4. Dockerfile 작성

# Use a base image with OpenJDK 17
FROM openjdk:17-oracle

# Set the working directory
WORKDIR /app

# Copy the application jar file to the container
COPY build/libs/auto_enter_view-0.0.1-SNAPSHOT.jar auto_enter_view-0.0.1-SNAPSHOT.jar

# Expose the application port
EXPOSE 8080

# Define environment variables
ENV SPRING_DATASOURCE_URL=jdbc:mariadb://auto-enter-view-db.ch2uuwgg6wei.ap-northeast-2.rds.amazonaws.com:3306/auto-enter-view-db
ENV SPRING_DATASOURCE_USERNAME=사용자명
ENV SPRING_DATASOURCE_PASSWORD=비밀번호
ENV SPRING_MAIL_HOST=smtp.gmail.com
ENV SPRING_MAIL_PORT=587
ENV SPRING_MAIL_USERNAME=지메일 주소
ENV SPRING_MAIL_PASSWORD=구글 앱 비밀번호

# Run the application
ENTRYPOINT ["java", "-jar", "auto_enter_view-0.0.1-SNAPSHOT.jar"]

 

 

5. 터미널에서 도커 이미지 빌드

docker build -t auto-enter-view .

 

 

6. EC2 인스턴스 생성 및 보안 그룹 설정

(SSH 키와 jar 파일을 하나의 폴더로 옮김)

 

 

7. EC2 인스턴스에 SSH로 접속

chmod 400 AutoEnterViewKey.pem
ssh -i "AutoEnterViewKey.pem" ubuntu@ec2-XX-XXX-XXX-XX.ap-northeast-2.compute.amazonaws.com

 

 

8. bash 창에서 Docker 설치

패키지 업데이트

sudo apt-get update

 

필요한 패키지 설치

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

Docker의 공식 GPG 키 추가

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

 

Docker 저장소 설정

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

 

Docker 설치

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

Docker 서비스 시작

sudo systemctl start docker
sudo systemctl enable docker

 

현재 사용자에게 Docker 권한 부여

sudo usermod -aG docker $USER
newgrp docker

 

Docker 실행 확인

docker --version

 

Docker compose 설치 (선택)

sudo apt-get install docker-compose-plugin

 

 

9. Docker Hub 회원가입

 

 

10. Docker Hub에 이미지 푸시

로그인

docker login

 

Docker 이미지 태그 지정

docker image ls
docker tag auto-enter-view imgyuri0517/auto-enter-view:latest

 

Docker 이미지 푸시

docker push imgyuri0517/auto-enter-view:latest

 

Docker 이미지 실행 

docker run -p 8080:8080 imgyuri0517/auto-enter-view:latest

 

 

11. 오류 확인 및 해결

java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptiert(java.sql.SQLException, String)" because the return value of "org.hibernate.resourcebackend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null

 

위에서 Datagrip을 통해 접속한 RDS DB에 해당 스키마가 존재하지 않아서 생기는 문제 (추정)

'auto-enter-view-db'라는 schema를 만들어주고 다시 실행하니 해결됨

 

 

12. bash 창에서 컨테이너 실행 후 제대로 데이터가 저장되는지 확인

MariaDB 로그인

mysql -h [호스트명] -u [사용자명] -p

 

데이터 확인

ShOW DATABASES;
USE [데이터베이스명];
SHOW TABLES;
SELECT * FROM [테이블명];