(TIL) 20220202, Docker로 스프링 프로젝트 배포하기

2022. 2. 4. 04:53TIL(Today I learned)

반응형

📕Facts(한 것)


  • Docker로 스프링 프로젝트 배포

 

📕Findings(배운 것)


이번에 진행하는 프로젝트의 배포 방식은 도커이고 싶었다.

왜 도커일까? 도커가 가진 장점이 뭐길래? 그리고 지금 프로젝트에서 필요한가?

 

도커의 장점은 아래의 글에서 알아보자.

 

 

(TIL) 20210109, 배포와 도커

📕Facts(한 것) 팀원들과 모여서 ERD 설계 JPA에 대하여 심도깊은 대화를 나누려다 실패 배포 방법 결정 앱 디자인 거의 완료 📕Findings(배운 것) 항상 간단한 도메인만 설계했어서 ERD 설계를 따로

mirrorofcode.tistory.com

 

도커는 주로 여러개의 서버를 배포할 때 사용하는데, 우리팀의 경우 당연히 그럴 경우는 없었다.

그럼 왜 도커여야 했을까?

특별한 이유는 없지만 현재 대다수의 기업이 aws상에서 도커로 배포를 진행한다.

그리고 쿠버네티스가 각광받고 있는 지금, 도커를 미리 익혀보는 것이 학습에 큰 도움이 될 것이라고 생각했기 때문이다.

 

그럼 도커로는 어떻게 배포할까?

 

우선 도커를 사용하려면 도커 파일이 프로젝트 최상단에 존재해야한다.

반드시 도커파일을 이름은 Dockerfile 이어야 한다.

FROM openjdk:11
EXPOSE 8080
ADD build/libs/devthink-0.0.1.jar devthink-0.0.1.jar
ENTRYPOINT ["java", "-jar", "devthink-0.0.1.jar"]

우리 프로젝트는 자바 11버전을 사용하고 있기 때문에 openjdk:11을 적용했다.

그리고 8080포트로 내보낼 것이며,

빌드된 파일의 위치를 알려주고

진입점을 설정해주면 된다.

 

빌드된 파일의 위치를 알려줬단 얘기는 빌드된 파일을 사용한다는 뜻이다.

 

그렇기 때문에 도커설정 전에 빌드가 선행되어야 한다.

./gradlew build

혹은
//test 없이 빌드
./gradlew build -x test

 

위의 명령어를 통해서 빌드를 진행하면

/build/libs 에 파일이 빌드한 파일이 생성된다.

 

여기서 aws배포라면 그냥 aws상에서 

java -jar {파일이름}을 하면 되지만, 우리는 도커를 사용하기 때문에 다른 절차가 필요하다.

 

먼저 파일을 git에 모두 올려놓고, aws상에서 clone한다.(aws 상 빌드)

 

혹시 도커 허브에 가입되어 있지 않다면 도커허브에 가입하자.

 

이후 aws상에 클론된 프로젝트 최상단으로 가서 아래의 명령어를 입력한다.

 

docker build --build-arg DEPENDENCY=build/dependency -t 도커허브ID/repository이름 .

//호옥시 local에서 빌드할경우 m1 맥 이라면
docker build --build-arg DEPENDENCY=build/dependency -t 도커허브ID/repository이름 --platform linux/amd64 .

 

여기서 주의할점은 반드시 .을 포함하는 것이다. 

 

그리고 아래의 명령어를 입력해서 도커허브에 빌드된 이미지를 넣어주자.

docker login

docker push 도커허브ID/repository이름

 

그럼 도커허브 홈페이지에 들어가서 로그인 하면 자신의 이미지가 푸쉬되었음이 확인가능하다.

 

그리고 aws상으로 가보자.

 

aws에 도커가 설치가 되어 있지 않다는 가정하에

  1. 도커 설치
  2. 도커 실행
  3. 도커 허브의 이미지파일 pull
  4. 도커 이미지를 배포

의 순서로 이어진다.

 

sudo apt-get install docker

sudo service docker start

sudo docker pull 도커id/repository이름

sudo docker run -d -p 8080:8080 도커id/repository이름

(맨 마지막 -d 를 넣게되면 nohup을 입력한 것과 마찬가지로 백그라운드에서 계속 서버를 실행한다.)

 

위 순서대로 명령어를 입력하고 주소창에 본인 aws의 퍼블릭 주소를 입력하면 접속을 할 수 있다.

 

📕Feeling(느낀 점)


배포를 혼자 진행해서 삽질이 많았지만 해결해서 기쁘다.

 

📕여담


 

반응형