해당 프로젝트는 Gradle을 통해 진행하기 때문에 Gradle로 Docker를 연동하는 과정을 할 것이다. 만약 Maven으로 하고 싶다면 Maven Docker 연결 블로그를 확인해주길 바란다.
maven을 통한 실습에서는 리눅스 환경에서 명령어를 통해 진행했지만 현재 실습에서는 project안에서 환경구축을 해보겠다.
gradle - build - assemble 실행
assemble 실행하여 libs/jar 파일을 생성한다.
FROM gradle:7.4-jdk11-alpine as builder
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
# APP
FROM openjdk:11.0-slim
WORKDIR /app
# 빌더 이미지에서 jar 파일만 복사
COPY --from=builder /build/build/libs/bbs-0.0.1-SNAPSHOT.jar .
EXPOSE 8080
# root 대신 nobody 권한으로 실행
USER nobody
ENTRYPOINT [ \
"java", \
"-jar", \
"-Djava.security.egd=file:/dev/./urandom", \
"-Dsun.net.inetaddr.ttl=0", \
"bbs-0.0.1-SNAPSHOT.jar" \
]
Docker 파일이 올라왔는지 꼭 확인하기
아마존 EC2서버 환경에서 내가 올린 깃허브 주소를 GitClone하여 파일을 받아줌
docker build -t springboot-mustache-project .
------------
docker : docker 명령어
build -t : 이미지 빌드(태그)
spring-mustache-project . : 파일명
(파일명 맨 뒤에 . 을 붙여줘야함 . 앞뒤로 한칸씩 띄어쓰기해야함!!)
도커 컨테이너를 빌드하기 위해 이미지 빌드한다.
이미지 빌드후 정상적으로 생겼는지 docker images를 통해 확인한다.
❗ 만약 이때 용량이 없다고 출력이 된다면 prune 명령어를 사용하여 사용하고 있지 않은 파일을 삭제하면 된다.
자세한 사항은 Docker 명령어 정리 참고
docker run -p 8080:8080 -e SPRING_DATASOURCE_URL=jdbc:mysql://아마존 IPv4 DNS 주소/likelion-db -e SPRING_DATASOURCE_PASSWORD=password springboot-mustache-project
서버가 정상적으로 돌아가는 것을 확인할 수 있다.
http://아마존 IPv4 DNS 주소:8080/articles/list
아마존 EC2서버를 통해 페이지를 띄울 수 있다.(1) 수정사항을 github에 push
(2) 깃허브에 수정사항을 다시 내려받음
(해당 프로젝트 폴더 안에서 실행해야함. 현재 내 기준으로는 springboot-mustache-bbs 폴더안에서 실행)
git pull
(3) 도커 이미지를 덮어씌워 빌드
docker build -t springboot-mustache-project .
(4) 도커 이미지 실행
docker run -p 8080:8080 -e SPRING_DATASOURCE_URL=jdbc:mysql://아마존 IPv4 DNS 주소/likelion-db -e SPRING_DATASOURCE_PASSWORD=password springboot-mustache-project