본문 바로가기

Infra

[Docker] Springboot Docker 컨테이너 배포

 

Dockerfile 생성

[방법 1]

 

  • 아래와 같이 dockerfile 생성 시 OOM Error 등 여러 오류 발생
FROM openjdk:11 as *builder.  // 베이스 **이미지 *+* 이미지 **별칭

COPY gradlew .   // gradlew 복사

COPY gradle gradle   // gradle 복사

COPY build.gradle .   // build.gradle 복사

COPY settings.gradle .   // settings.gradle 복사

COPY src src   // 웹 어플리케이션 소스 복사

RUN chmod +x ./gradlew   // gradlew 실행 권한 부여

RUN ./gradlew clean bootJar   // gradlew 을 사용하여 실행 가능한 jar 파일 생성

FROM openjdk:11   // 베이스 이미지

COPY --from=builder/build/libs/*.jar app.jar   // builder 이미지에서 -> build/libs/*.jar 파일을 app.jar 로 복사

EXPOSE 8080   // 컨테이너 Port 노출

ENTRYPOINT ["java","-jar","/app.jar"]   // jar 파일 실행

 

[방법 2] Docker Cache 사용

 

FROM openjdk:11-jdk

ARG *JAR_FILE*=build/libs/*.jar

COPY ${*JAR_FILE*} app.jar

EXPOSE 8080

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

 

gradle 빌드

  • 아래 명령어를 통해 빌드하면, build/libs 경로에 jar 파일 생성
./gradlew clean

./gradlew build -x test (-x test: 테스트 실행 X)

 

Dockerfile → Image Build

  • 가장 마지막 점(.) 포함
  • M1 인 겨우, -- platform linux/amd64 옵션을 마지막에 추가해야 함
[gradle 인 경우]

docker build --build-arg DEPENDENVY=build/dependency -t 도커허브ID/Repository --platform linux/amd64 .
[gradle 인 경우] OS M1 MAC 이 아닌 경우

docker build --build-arg DEPENDENVY=build/dependency -t 도커허브ID/Repository  .

 

Docker Image 파일 → Docker hub 에 Push

docker push 도커허브ID/Repository

 

AWS EC2 에서 어플리케이션 배포

 

AWS EC2 (AMI : Linux2) 접속

cd ~/.ssh

ssh SpringBootServer

 

AWS EC2 에 Docker 설치 및 버전 확인

sudo yum install docker

sudo docker -- version

 

Docker 실행

sudo docker pull 도커허브ID/Repository

 

Docker hub 에 존재하는 Image File Pull

  • 이때, tag를 안넣을시 :latest 로 pull 진행
sudo docker pull 도커허브ID/Repository

 

Docker Image 를 통해 SpringBoot Application 배포(실행)

  • 이때, [8080:8080] = 외부 접속 포트 : 도커 컨테이너 포트
sudo docker run -p 8080:8080 도커허브ID/Repository

'Infra' 카테고리의 다른 글

[Infra] 쿠버네티스와 EKS  (1) 2022.09.17