[SpringBoot(2)] Docker 연결

배지원·2022년 11월 13일
0

실습

목록 보기
13/24
post-custom-banner

📄 Docker 연동

해당 프로젝트는 Gradle을 통해 진행하기 때문에 Gradle로 Docker를 연동하는 과정을 할 것이다. 만약 Maven으로 하고 싶다면 Maven Docker 연결 블로그를 확인해주길 바란다.

1. Gradle에서 실습

  • 이전 Maven으로 했을때와 달리 이번에는 Linux 서버에서 설치하지 않고 Project상에 파일과 폴더를 추가해서 빌드하는 방식으로 이미 필요한 유틸리티가 설치된 이미지에서 빌드한 후 그 파일을 java가 설치된 서버로 복사하는 방법이다.

(1) TestCase 오류발생 제거

  • TestCase에서 오류가 발생하는 경우가 많으므로 Test Case의 test 메서드을 모두 주석처리하거나 지워준다.

(2) Jar 파일 생성

  • maven을 통한 실습에서는 리눅스 환경에서 명령어를 통해 진행했지만 현재 실습에서는 project안에서 환경구축을 해보겠다.

  • gradle - build - assemble 실행

  • assemble 실행하여 libs/jar 파일을 생성한다.

(3) Dockerfile 생성

  • 이전에는 linux 서버 상에서 명령어를 통해 Dockerfile을 만들었지만 이번에는 프로젝트 안에 바로 파일을 만들어 구현해보겠다.
  1. 파일안에 Dockerfile 생성한다
  2. 파일안에 Docker 실행에 필요한 설정들을 넣어준다.
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"              \
]
  1. 밑줄친 부분에 자신에 해당하는 jar파일명을 넣어준다.

(4) Github에 올리기

  • Github에서 클론해서 사용하기 위해 Github에 지금까지 작업한 내용을 commit/push 해줌

Docker 파일이 올라왔는지 꼭 확인하기

(5) EC2서버에서 GitClone

아마존 EC2서버 환경에서 내가 올린 깃허브 주소를 GitClone하여 파일을 받아줌

(6) 도커 이미지 빌드

docker build -t springboot-mustache-project . 
------------
docker : docker 명령어
build -t : 이미지 빌드(태그)
spring-mustache-project . : 파일명
(파일명 맨 뒤에 . 을 붙여줘야함 . 앞뒤로 한칸씩 띄어쓰기해야함!!)
  • 도커 컨테이너를 빌드하기 위해 이미지 빌드한다.

  • 이미지 빌드후 정상적으로 생겼는지 docker images를 통해 확인한다.

❗ 만약 이때 용량이 없다고 출력이 된다면 prune 명령어를 사용하여 사용하고 있지 않은 파일을 삭제하면 된다.
자세한 사항은 Docker 명령어 정리 참고

(7) 도커 컨테이너 빌드

docker run -p 8080:8080 -e SPRING_DATASOURCE_URL=jdbc:mysql://아마존 IPv4 DNS 주소/likelion-db -e SPRING_DATASOURCE_PASSWORD=password springboot-mustache-project
  • 중간에 아마존 IPv4 DNS 주소는 자신이 만든 AWS EC2의 주소를 작성하면 된다.

서버가 정상적으로 돌아가는 것을 확인할 수 있다.

(8) 서버를 통한 웹페이지 띄우기

  • 기존에는 localhost:8080을 통해 서버를 띄웠다면 이제는 아래의 코드를 입력해
    http://아마존 IPv4 DNS 주소:8080/articles/list
    아마존 EC2서버를 통해 페이지를 띄울 수 있다.

2. 코드 수정했을 경우

수정사항 반영하기

  • 만약 Docker run까지 다하고 코드를 수정해서 git에 push했을 경우 수정사항을 다음과 같이 반영할 수 있다.

(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
profile
Web Developer
post-custom-banner

0개의 댓글