본문 바로가기
New Skill

[Docker] Spring Boot Jar 파일 Docker로 배포하기 - Image, Docker File (1)

by jisayDeveloper 2023. 11. 8.
728x90
반응형
SMALL

일단 이 글을 시작하기 전에 정말 며칠동안 맨땅에 헤딩하며 도커를 하나 하나 알아갔고 너무 많은 명령어와 구조도 복잡하여 여러 Exception과 Error를 잡으며 드디어 성공하게되어 도커 배포 일대기를 글로 남기려 합니다.

 

요근래 안드로이드도 배우면서 서버와 연결하며 한창 재밌게 공부하다가 전부터 관심있던 도커를 사용해서 API서버를 배포하게 되었습니다.

 

첫시작은 MariaDB를 먼저 image로 만듭니다.

docker pull mariadb

위 명령어로 MariaDB image를 다운로드 합니다.

 

docker images

위 명령어로 Docker image 들을 확인할 수 있습니다.

 

docker run -p 3306:3306 --name {컨테이너 이름 작성} -e MARIADB_ROOT_PASSWORD={비밀번호} -d mariadb

ex) docker run -p 3306:3306 --name maria -e MARIADB_ROOT_PASSWORD=0000 -d mariadb
docker ps //실행 중인 컨테이너만 조회
docker ps -a //모든 컨테이너 조회

위 명령어로 컨테이너 조회할 수 있습니다.

 

 

이제 컨테이너가 만들어졌으니 MariaDB에 접속하겠습니다.

docker exec -it {컨테이너 이름} mariadb -uroot -p
ex) docker exec -it maria mariadb -uroot -p

root 계정으로 로그인 할거고 비밀번호 누르시면 접속완료입니다.

 

create database {데이터베이스 이름};
ex) create database rest;

'rest'이름의 데이터베이스를 만듭니다.

 

계정을 만들어줍니다.

create user 'user_name'@'ip_address' identified by 'user_password';

ex) create user 'js'@'%' identified by '0000';
ex) create user 'js'@'localhost' identified by '0000';

'ip_address' 부분은 사용자가 접근할 수 있는 호스트를 지정하며 '%'는 모든 호스트에서 데이터베이스 접근 가능합니다.

 

이제 권한을 부여해야 데이터베이스를 사용할 수 있습니다.

grant all privileges on db_name.* to 'user_name'@'ip_address';

ex) grant all privileges on rest.* to 'js'@'%';

모든 권한을 부여했습니다.

 

마지막으로 새로고침합니다.

flush privileges;

 


이제 docker file을 작성합니다.

프로젝트 우클릭 → New → DockerFile 선택합니다.

 

FROM openjdk:11

COPY build/libs/rest-0.0.1-SNAPSHOT.jar /myboot.jar

ENTRYPOINT ["java", "-jar", "/myboot.jar"]
  • FROM : Docker 이미지를 생성하는 기본 이미지를 지정합니다. OpenJDK 11 이미지를 사용하고 Java 버전은 11입니다.

  • COPY : 로컬 시스템에서 rest-0.0.1-SNAPSHOT.jar 파일을 Docker 이미지 내의 /myboot.jar 경로로 복사합니다. 이렇게 함으로써 애플리케이션의 JAR 파일을 Docker 컨테이너 내부로 복사하게 됩니다.
  • ENTRYPOINT : Docker 컨테이너가 시작될 때 실행되는 명령을 설정합니다. boot.jar는 복사된 JAR 파일의 경로에 따라 Java로 JAR 파일을 실행합니다.

이제 jar파일을 만들어 보겠습니다.

 

Gradle 탭에 build로 가서 bootJar 클릭, 문제없다면 빌드되면서 

libs 하위에 jar파일이 생깁니다.

 

powerShell을 열고 image 빌드해보겠습니다.

 

일단 도커파일이 있는 곳으로 갑니다.

docker build -t {이미지 이름} .
ex) docker build -t rest-api .

 

맨뒤에 한칸 띄고 '.'을 해야합니다. 현재 디렉토리란 뜻입니다.

 

docker run -p 8080:8080 {이미지 이름}
ex) docker run -p 8080:8080 rest-api

이 이미지로 컨테이너를 만듭니다.

 

그런데

 

????

 

뭔가 잘못했나봅니다...

 

알고보니 프로퍼티스가 문제였습니다. 무슨 소리냐면

spring.datasource.url=jdbc:mariadb://localhost:3306/rest   //처음 쓴 코드 spring.datasource.url=jdbc:mariadb://mariadb컨테이너ip:3306/rest   //해결

 

MariaDB 컨테이너의 ip를 입력해야 연결할 수 있었습니다. 이것도 구글링하며 오래 찾아봤었는데 해결하고보니 에러가 나는게 너무나 당연했습니다. 

 

 

실행하고 테스트 해보니 200 잘뱉네요ㅋㅋ

 

데이터베이스에도 잘들어갑니다.

 

이상으로 도커에 대한 추가 지식이 또 업데이트 되면 포스팅하겠습니다.

 

 

 

 

 

 

 

728x90
반응형
LIST