본문 바로가기
Infra

EC2 Docker에서 Spring boot 실행하기

by Going9 2023. 11. 27.

1. Spring boot 빌드

스프링부트 프로젝트를 만들어주고 build.gradle에 다음 문구를 추가해준다.

jar {
	enabled = false
}

 

아래는 build.gradle 전체 코드

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.0'
	id 'io.spring.dependency-management' version '1.1.4'
}

group = 'laptop.gg'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

jar {
	enabled = false
}

 

위 코드를 추가해주지 않으면 프로젝트를 빌드했을 때 plain이 붙은 jar 파일이 추가로 생성된다.

 

터미널에서 아래 명령어로 빌드한다.

$ ./gradlew build

 

빌드가 안돼서 고생했는데, 프로젝트는 jdk 17이었고 환경변수는 11로 잡혀 있어서 안됐던 것이었다.

 

2. Dockerfile 작성 및 Docker Image 생성

이후 아래와 같이 도커 파일을 작성해주었다.

FROM openjdk:17-jdk
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"]

 

도커 이미지를 생성하기 위해 우선 로그인을 하고,

$ docker login -u "도커 허브 아이디"
Password: 비번 입력
Login Succeeded

 

아래와 같이 이미지를 빌드했다.

$ docker build -t "도커 허브 아이디"/laptop-gg:v1.0 .

 

3. Docker Hub에 이미지 push 및 pull

빌드 성공 후 도커 허브에 이미지를 push.

$ docker push "도커 허브 아이디"/laptop-gg

 

EC2로 이동해서 푸쉬한 이미지를 pull 해준다. 그러기 위해 로그인부터 해준다.

$ docker login -u "도커 허브 아이디"
$ docker pull "도커 허브 아이디"/laptop-gg:v1.0

 

pull도 잘 안됐는데, 도커 이미지 앞에 "도커 허브 아이디"/ 를 꼭 해주어야 했다.

 

이미지 실행

$ sudo docker run -d -p 8080:8080 "도커 허브 아이디"/laptop-gg:v1.0

 

끝!

이후에는 네이버 클라우드 서버에 젠킨스를 설치해서 EC2의 스프링 부트를 관리하고, 두 도커를 도커 스웜으로 관리해보려고 한다.