[Docker] ec2에 springboot app Docker로 띄우기

Coastby·2022년 11월 5일
0

LIKELION Back-End School

목록 보기
51/61
post-custom-banner

💡 준비사항
1. 실습용 데이터 서버가 하나라서 deleteAll()이 들어가는 테스트 코드는 주석처리하였다.
2. .mvn 이하, .idea 이하, target 이하, hello.iml, help.md를 제외한 나머지를 git에 올린다. (🚫에러)
3. 서버에 올리기 전에 로컬에서 packaging 테스트, 그리고 테스트코드, 환경변수, 디렉토리 등이 로컬과 분리되어 있는지 확인한다.


[순서]
1. EC2 인스턴스 생성 & Docker 설치
2. Maven 설치하기
3. git clone & maven packaging
4. 도커 빌드 & 실행
5. 확인하기


1. EC2 인스턴스 생성 & Docker 설치

이전 블로그 포스팅 참고
[AWS, Docker] aws ec2 instance에 docker 설치하기

나머지 설정은 동일하며, 보안 그룹에서 8080포트를 열어 준다.

2. Maven 설치하기

Ubuntu에서는 패키지 설치를 위해서 보편적으로 apt (Advance Packaging Tools) 명령어를 사용한다. apt는 기존의 apt-get, apt-cache 등의 통합으로 나온 패키지 매니징 툴이다.

apt update
apt install maven

○ apt 명령어

  • apt update : 설치 가능한 패키지 리스트를 최신화
  • apt upgrade : 실제 업데이트
  • apt install : 패키지 설치
  • apt remove : 패키지 삭제

3. git clone & maven packaging

👉 git clone

루트 또는 적당한 디렉토리에 프로젝트 깃을 클론한다.

git clone https://github.com/coastby/springboot-hospital-api.git

도커 컨테이너를 빌드하기 위해서는 .jar 파일이 있어야 한다.
프로젝트를 패키징하면 (maven을 빌드하면) target 폴더 안에 .jar 파일이 생성된다.

👉 Dockerfile 만들기

vim Dockerfile

아래 내용 작성하기

FROM openjdk:11-jdk-slim
VOLUME /tmp
ADD /target/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

👉 maven packaging

그냥 mvn package를 하게되면 현재 프로젝트의 테스트코드는 독립적이지 않아 서버 상에서 통과하지 못하여 빌드를 실패한다. 참고 - 🚫에러
그래서 임시방편으로 테스트를 스킵하고 메이븐을 빌드한다.

mvn -DskipTests=true package

4. 도커 빌드 & 실행

👉 도커 빌드

#프로젝트 폴더의 root directory 에서 실행
docker build -t springboot-jdbc-template . 


생성되었는지 확인한다.

docker images #실행되기 전 확인가능
docker ps #실행된 후 확인가능 (run을 해야 실행된다.)


⭐️ 도커 컨테이너 실행 ⭐️

  • -p 8080:8080 : 호스트의 포트를 사용하기 위해 포트포워딩을 해주어야 한다.
  • -e : yml 파일에는 로컬로 데이터소스 url이 설정되어 있어서 환경변수 데이터베이스가 있는 서버의 주소를 넘겨준다.
  • 이미지 식별자는 꼭 마지막에 넣어준다. (🚫에러1, 🚫에러2)
docker run -p 8080:8080 -e SPRING_DATASOURCE_URL=jdbc:mysql://[ec2도메인주소]:3306/likelion -e SPRING_PROFILES_ACTIVE=aws springboot-jdbc-template

SPRING_PROFILES_ACTIVE

미니 프로젝트가 아닌 이상 대부분 기업용 서비스는 개발 (dev), 테스트 (test), 운영 (prod) 등으로 구동 환경을 세분화하여 서비스를 관리한다. 이런 식별 키워드를 Profile이라고 부른다. Profile을 저장함으로서 데이터베이스 접속 계정 및 옵션, 리소스, 로그 관리 정책 등을 profile 단위로 구분하여 효과적으로 관리할 수 있다. 스프링 부트는 직관적이고 편리한 profile 관리 방법을 제공한다.

profile 설정하기

  • 스프링부트 기반으로 개발한 서비스가 구동될 profile을 지정하는 가장 확실한 방법은 운영체제의 환경변수에 profile을 설정하는 것이다. 환경 변수의 이름은 SPRING_PROFILES_ACTIVE이다.
  • 이 방법은 특히 개발환경에서 구동 시 IDE 레벨에서 별도의 JVM 옵션을 설정하지 않아도 되기 때문에 가장 편리한 방법이다.
  • 개발자는 자신의 개발 PC에 환경 변수를 설정해두면 IDE에 구애받지 않고 언제나 해당 Profile로 구동할 수 있다.

profile 단위 application.properties 작성하기

  • profile에 따라 서로 다른 설정값을 가진 application.properties 파일을 작성할 수 있다.
application-{profile}.properties	# 파일명 형식
application-dev.properties			# 예시)

5. 확인하기

  • swagger를 이용하여 아래 주소에 들어가서 API를 요청해본다.
http://[DNS주소]:8080/swagger-ui/
profile
훈이야 화이팅
post-custom-banner

0개의 댓글