개발하는 자몽

[Docker/Spring] Dockerfile 작성과 Docker에서 SpringBoot 빌드하기 본문

Architecture & Tool/Docker

[Docker/Spring] Dockerfile 작성과 Docker에서 SpringBoot 빌드하기

jaamong 2023. 5. 25. 13:29

이전 포스트

 

[Spring/EC2/MySQL] SpringBoot와 EC2 - Docker - MySQL 연동

이전 포스트 [AWS EC2/Docker] EC2 생성, EC2에 Docker 설치, Docker에 MySQL 띄우기 목표 AWS EC2 인스턴스를 생성하고 EC2 상에서 Docker를 설치해 보고 Docker에서 MySQL을 띄워보자 AWS EC2 인스턴스 생성하기 1. AWS

backend-jaamong.tistory.com

 

이번에는 Docker에서 SpringBoot를 띄워보자. 띄울 SpringBoot에는 당연히 의존성에 spring web이 있어야 한다.

implementation 'org.springframework.boot:spring-boot-starter-web'

 

 

 

1. Dockerfile 작성

빌드할 SpringBoot 프로젝트에 Dockerfile을 생성하자. 반드시 Dockerfile이라는 이름으로 생성해야 한다.

Dockerfile 위치

 

아래는 Dockerfile에 들어갈 내용이다.

FROM gradle:7.5.1-jdk17-alpine as builder
USER root
WORKDIR /build

COPY build.gradle settings.gradle /build/
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true

COPY . /build
RUN gradle build -x test --parallel

FROM openjdk:17.0-slim
WORKDIR /app

COPY --from=builder /build/build/libs/*-SNAPSHOT.jar ./app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar" ]

이 파일의 내용에는 Docker에서 SpringBoot 빌드까지 하는 내용이 포함되어 있기 때문에 터미널에서 따로 SpringBoot를 빌드해 줄 필요가 없다.

 

2. Docker build

작성 완료 후 github repository에 commit & push를 진행하자. 이제 git clone을 이용하여 해당 프로젝트를 ec2 인스턴스에 다운로드하도록 하자.

git clone

 

git clone 이후 해당 프로젝트로 이동하고 아래 명령어를 입력한다. 이미지 이름은 원하는 대로 입력하되 대문자가 들어가선 안 된다. 

docker build -t <이미지이름> . //. 뒤에 반드시 띄어쓰기 하고 enter

docker build

 

3. Docker run

빌드가 잘 되었다면 아래 명령어를 입력하여 실행한다. 아래 명령어에 -d 옵션을 줘서 데몬으로 띄울 수 있고 -p 8080:8080 처럼 옵션을 줘서 포트를 명시해 줄 수 있다. 실행 전, 인스턴스 보안 그룹에 8080 포트가 열려있는지 확인을 꼭 하자

docker run <이미지이름> //기본
docker -d -p 8080:8080 <이미지이름> //-d 옵션과 -p 옵션

docker run
인스턴스 보안 그룹

 

이렇게 실행하고 ec2 인스턴스의 퍼블릭 주소로 접속하면~ 

접속 화면

위와 같은 화면이 아닌 whitelabel 에러가 반겨줄 것이다. 나의 경우는 / 경로로 접속하면 hello를 출력하도록 미리 컨트롤러를 작성해 뒀다. 

@RestController
public class HelloController {

    @GetMapping("/")
    public String hello() {
        return "hello";
    }
}

 

그러면 여기까지! Docker에서 SpringBoot 프로젝트를 빌드하고 실행까지 완료해 봤다. 

Comments