프로젝트를 마무리 하는 단계에서 배포 작업을 정리하려고 한다.
(도커는 이미 설치되어있는 상황이고 만약 도커가 설치가 안되어있으면 아래 링크를 참고하여 회원가입과 함께 진행하면 된다.)
[윈도우]
https://velog.io/@gmlstjq123/Docker-설치
[맥북]
https://happylie.tistory.com/78
프로젝트 실행을 위해서 Jar파일을 만들자.
./gradlew clean build -x test
테스트 코드를 제외하고 Jar파일을 만들어주는 명령어이다. 코드를 실행하면 build/libs 디렉토리에 Jar파일이 생성이 된 것을 확인할 수 있다.
도커 이미지를 생성하기 위해서 도커 파일을 작성하자. 위치는 프로젝트 디렉토리랑 같은(build.gradle이랑 같은 위치)위치에 만든다. 파일 이름은 그냥 Dockerfile로 만들었다.
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
진행한 버전에 맞게 자바 버전을 설정해준다.
작성한 DockerFile로 이미지를 만들어 주기 위해 프로젝트 디렉토리로 이동 후 도커파일을 실행하자.
docker build --tag 도커계정명/이미지이름
도커 계정명에는 자기의 계정명을, 이미지 이름은 설정하고 싶은 이미지를 설정하면 된다.
여기서 M1맥북을 보유하고 있으면 오류가 발생할 수도 있는데 M1과 서버가 플랫폼 차이가 발생하기 때문에 명령어를 따로 쳐줘야 한다.
docker build --platform linux/amd64 -t 도커계정명/이미지이름
이후 로컬에서 만들어진 이미지를 푸쉬해주자.
docker push 도커계정명/이미지이름
EC2를 쓰던 구글 클라우드를 쓰던 SSH에서 받아오는 방법을 정리하려고 한다. 오류메세지가 뜨면 먼저 오타가 있는지 확인하고 오타가 없으면 앞에 sudo(관리자 권한 실행)를 붙여주면 된다. 본 코드들은 우분투 환경 기반이다.
먼저 도커 설치부터 진행한다.
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker --version
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
역시 도커 깔끔하고 조으네요 👍
윈도우나 맥에서는 docker 명령어에 관리자 권한이 필요 없었는데, 우분투 환경에서는 관리자 권한이 요구되나요?
우분투 인스턴스에서 유독 sudo 명령어를 자주 쓰게 되는 것 같은데 그 이유가 궁금합니다!