1. 간단 spring boot app, Docker로 render배포하기
1. 일단 배포할 spring boot app 소스 완성하기
Run as > Maven build...
Base directory에 [Workspace...] 버튼 눌러서 프로젝트 선택
Goals 에 "clean install" 입력하고 [Run] 버튼
/target위치에 "프로젝트명-0.0.1-SNAPSHOT.jar" 파일이 생김
cmd창 가서 아래 명령어 실행
java -jar ./프로젝트명-0.0.1-SNAPSHOT.jar
서버 잘 실행되면 배포할 준비 완성
2. Dockerfile 만들기
FROM openjdk:17-alpine
VOLUME /tmp
EXPOSE 8080
ARG JAR FILE
COPY target/프로젝트명-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
FROM openjdk:17-alpine AS builder
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew bootJAR
FROM openjdk:17-alpine
EXPOSE 8080
COPY --from=builder build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
프로젝트 root directory에 "Dockerfile" 이라는 확장자 없는 파일을 만들고 위 소스를 입력.
FROM을 2개 쓴 이유는 프로젝트 build를 먼저 하고 생긴 .jar파일로 app실행을 해야 해서 2개로 나눔.
이렇게 2개를 쓰려면 한쪽에 "AS builder"처럼 alias를 주고, 다른쪽에 "--from=builder"라고 참조하도록 하면 됌.
builder에서 build를 위한 필수파일들을 복사하고 빌드 후, 그 jar파일로 서버 실행.
3. 로컬에서 잘 되는지 실행해보자
app소스가 잘 작동하는지 확인하느라 build를 했다면 clean을 해줘서 로컬에서 build 안한 척을 해줌.
왜냐면 github에 올릴땐 build폴더를 올리지 않을꺼라서.(배포 상황에서 잘 돌아가는걸 확인해야 하니까)
terminal에서 다음 소스로 실행
$ docker build -t [image명] .
build 잘 되면 아래처럼 나올꺼임
$ docker build -t docker-single .
[+] Building 2.3s (15/15) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 373B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/openjdk:17-alpine 1.9s
=> [auth] library/openjdk:pull token for registry-1.docker.io 0.0s
=> CACHED [builder 1/8] FROM docker.io/library/openjdk:17-alpine@sha256:4b6abae565492dbe9e7a894137c966a7485154238902f2f25e9dbd9784383d81 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 1.18kB 0.0s
=> CACHED [builder 2/8] COPY gradlew . 0.0s
=> CACHED [builder 3/8] COPY gradle gradle 0.0s
=> CACHED [builder 4/8] COPY build.gradle . 0.0s
=> CACHED [builder 5/8] COPY settings.gradle . 0.0s
=> CACHED [builder 6/8] COPY src src 0.0s
=> CACHED [builder 7/8] RUN chmod +x ./gradlew 0.0s
=> CACHED [builder 8/8] RUN ./gradlew bootJAR 0.0s
=> [stage-1 2/2] COPY --from=builder build/libs/*.jar app.jar 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:b6cf9eb34244072f05da4b6966c7416eefe9dcec6c4aad1d1b48a7c97ec2145b 0.0s
=> => naming to docker.io/library/docker-single 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
방금 만든 image를 container로 실행
$ docker run --rm -p8080:8080 [image명]
그럼 IDE에서 보던 spring boot 로그가 쭉 올라갈꺼임.
브라우저에서 테스트 해보면 됌.
4. render에 배포
Web Service를 추가하고, github repository, branch를 선택하고 Runtime을 Docker로 선택.
Instance Type은 free
5. 확인
아래 url접속해서 확인.