[Docker/Spring] Dockerfile 작성과 Docker에서 SpringBoot 빌드하기
이전 포스트
이번에는 Docker에서 SpringBoot를 띄워보자. 띄울 SpringBoot에는 당연히 의존성에 spring web이 있어야 한다.
implementation 'org.springframework.boot:spring-boot-starter-web'
1. Dockerfile 작성
빌드할 SpringBoot 프로젝트에 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 이후 해당 프로젝트로 이동하고 아래 명령어를 입력한다. 이미지 이름은 원하는 대로 입력하되 대문자가 들어가선 안 된다.
docker build -t <이미지이름> . //. 뒤에 반드시 띄어쓰기 하고 enter
3. Docker run
빌드가 잘 되었다면 아래 명령어를 입력하여 실행한다. 아래 명령어에 -d 옵션을 줘서 데몬으로 띄울 수 있고 -p 8080:8080 처럼 옵션을 줘서 포트를 명시해 줄 수 있다. 실행 전, 인스턴스 보안 그룹에 8080 포트가 열려있는지 확인을 꼭 하자
docker run <이미지이름> //기본
docker -d -p 8080:8080 <이미지이름> //-d 옵션과 -p 옵션
이렇게 실행하고 ec2 인스턴스의 퍼블릭 주소로 접속하면~
위와 같은 화면이 아닌 whitelabel 에러가 반겨줄 것이다. 나의 경우는 / 경로로 접속하면 hello를 출력하도록 미리 컨트롤러를 작성해 뒀다.
@RestController
public class HelloController {
@GetMapping("/")
public String hello() {
return "hello";
}
}
그러면 여기까지! Docker에서 SpringBoot 프로젝트를 빌드하고 실행까지 완료해 봤다.