[Spring] 도커를 활용한 배포(Postgresql)

김현수·2024년 6월 5일
0

스프링 부트 프로젝트 도커로 배포하기

프로젝트를 마무리 하는 단계에서 배포 작업을 정리하려고 한다.

(도커는 이미 설치되어있는 상황이고 만약 도커가 설치가 안되어있으면 아래 링크를 참고하여 회원가입과 함께 진행하면 된다.)
[윈도우]
https://velog.io/@gmlstjq123/Docker-설치
[맥북]
https://happylie.tistory.com/78

1. 로컬에서 세팅하기

Jar 파일 만들기

프로젝트 실행을 위해서 Jar파일을 만들자.

./gradlew clean build -x test

테스트 코드를 제외하고 Jar파일을 만들어주는 명령어이다. 코드를 실행하면 build/libs 디렉토리에 Jar파일이 생성이 된 것을 확인할 수 있다.

Dockerfile 작성하기

도커 이미지를 생성하기 위해서 도커 파일을 작성하자. 위치는 프로젝트 디렉토리랑 같은(build.gradle이랑 같은 위치)위치에 만든다. 파일 이름은 그냥 Dockerfile로 만들었다.

FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

진행한 버전에 맞게 자바 버전을 설정해준다.

Docker 이미지 만들기

작성한 DockerFile로 이미지를 만들어 주기 위해 프로젝트 디렉토리로 이동 후 도커파일을 실행하자.

docker build --tag 도커계정명/이미지이름

도커 계정명에는 자기의 계정명을, 이미지 이름은 설정하고 싶은 이미지를 설정하면 된다.
여기서 M1맥북을 보유하고 있으면 오류가 발생할 수도 있는데 M1과 서버가 플랫폼 차이가 발생하기 때문에 명령어를 따로 쳐줘야 한다.

docker build --platform linux/amd64 -t 도커계정명/이미지이름

이후 로컬에서 만들어진 이미지를 푸쉬해주자.

docker push 도커계정명/이미지이름

2. SSH에서 받아오기

EC2를 쓰던 구글 클라우드를 쓰던 SSH에서 받아오는 방법을 정리하려고 한다. 오류메세지가 뜨면 먼저 오타가 있는지 확인하고 오타가 없으면 앞에 sudo(관리자 권한 실행)를 붙여주면 된다. 본 코드들은 우분투 환경 기반이다.

도커 로그인

먼저 도커 설치부터 진행한다.

  1. 우분투 시스템 패키지 업데이트
sudo apt-get update
  1. 필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  1. Docker의 공식 GPG키를 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. Docker의 공식 apt 저장소를 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. 시스템 패키지 업데이트
sudo apt-get update
  1. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 설치 확인
sudo docker --version
  1. 도커 로그인
sudo docker login

이미지 가져오기

docker pull 도커계정명/이미지이름

postgresql을 사용했으니 postgres도 가져오자

docker pull postgres:latest

이후 postgres먼저 이미지를 실행시켜준다. -d를 붙이면 백그라운드로 돌아가게 해준다.

docker run -d -p 5432:5432 -e POSTGRES_PASSWORD="설정할 패스워드" --name PostgreSQL postgres

잘 실행되었는지 확인해 보자

sudo docker ps


성공!

해당 컨테이너에 접근하여 데이터베이스를 만들자

sudo docker exec --user="root" -it PostgreSQL "bash"


이러면 위처럼 저런 텍스트가 붙어져 있을텐데 그러면 잘 된거다. 그러면 로컬에서 한 것 처럼 postgresql을 실행 하고 데이터베이스를 만들어 주자

psql -U postgres

데이터베이스를 만들고 마지막으로 프로젝트 컨테이너를 실행하면 마무리

docker run -d -p 8080:8080 도커계정명/이미지이름

이후 사이트로 접속했을때 오류가 날 수도 있다. 아마 오류가 나면 docker ps를 했을때 해당 컨테이너가 안보일텐데 다음 코드를 통해 로그를 확인하여 오류를 수정할 수 있다.

sudo docker logs 컨테이너ID

2개의 댓글

comment-user-thumbnail
2024년 6월 5일

역시 도커 깔끔하고 조으네요 👍
윈도우나 맥에서는 docker 명령어에 관리자 권한이 필요 없었는데, 우분투 환경에서는 관리자 권한이 요구되나요?
우분투 인스턴스에서 유독 sudo 명령어를 자주 쓰게 되는 것 같은데 그 이유가 궁금합니다!

1개의 답글