docker로 Spring Boot App, Postgres 이미지 만들어서 실행시키기

2025. 1. 10. 12:46· 인프라/docker
목차
  1. 1. Todo 애플리케이션
  2. 2. application.yml
  3. 3. Dockerfile
  4. 4. build jar
  5. 5. docker build
  6. 6. docker tag
  7. 7. docker push
  8. 8. docker network
  9. 8 - 1. docker network의 장점
  10. 9. Postgres를 도커 이미지로 실행
  11. 10. Spring Boot 실행
  12. 11. 결과

1. Todo 애플리케이션

 

간단한 Todo 애플리케이션을 만든다. 

JSON을 반환하는 REST API application.

아주 간단해서 생략....

https://github.com/in28minutes/kubernetes-crash-course/tree/master/03-todo-web-application-mysql

 

kubernetes-crash-course/03-todo-web-application-mysql at master · in28minutes/kubernetes-crash-course

Learn Kubernetes and Docker with Google Kubernetes Engine deploying Spring Boot Microservices - in28minutes/kubernetes-crash-course

github.com

 

위의 자료는 spring boot, war, MySQL 로 실습하는데,
나는 굳이 war로 빌드할 필요 없고, MySQL 말고 postgreSQL을 사용해야 해서 

spring boot, jar, postgreSQL 조합을 선택했다.

위의 자료는 코드만 참고하자.

 

2. application.yml

spring:
  datasource:
    url: jdbc:postgresql://${RDS_HOSTNAME:localhost}:${RDS_PORT:5432}/${RDS_DB_NAME:todos}
    driver-class-name: org.postgresql.Driver
    username: ${RDS_USERNAME:postgres}
    password: ${RDS_PASSWORD:password}
  jpa:
    hibernate:
      ddl-auto: update # 스키마 자동 생성/업데이트 (create, update, validate, none 중 선택)
    defer-datasource-initialization: true # JPA 초기화 후 data.sql 실행
    show-sql: true # 실행된 SQL 로그 출력
    properties:
      hibernate:
        format_sql: true # SQL 로그를 보기 좋게 포맷팅

logging:
  level:
    org.hibernate.SQL: DEBUG # SQL 쿼리 로깅
    org.hibernate.type.descriptor.sql.BasicBinder: TRACE # 바인딩된 파라미터 로깅

 

datasource.url, username, password 에 주목

환경변수에 있는 RDS_HOSTNAME을 찾고 없다면 localhost로 실행하라는 의미다.

도커 이미지로 만들었다면 환경 변수로 만들 수 있다는 소리다.

 

3. Dockerfile

FROM openjdk:17-jdk

ARG JAR_FILE=build/libs/*.jar

COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]

 

jar로 빌드한다음에 docker build 명령어를 수행하면 jar를 복사해서 이미지를 만들겠다는 내용이다.

 

4. build jar

./gradlew build

 

 

5. docker build

docker build -t todo-app:3.0 .

 

 

6. docker tag

이미지를 도커 허브에 업로드하기 위해 내 저장소 이름으로 태그를 달아줘야 한다.

 

docker tag todo-app:3.0 griotold/todo-app:3.0

 

 

7. docker push

docker push griotold/todo-app:3.0

 

 

 

3.0 있는 거 확인했지?

 

8. docker network

 

PostgreSQL 컨테이너와 Spring Boot 애플리케이션이 기본 브리지 네트워크에서 서로 통신할 수 없기 때문에

사용자 지정 network를 만들어, 두 컨테이너를 동일한 네트워크에 연결해주어야 한다.

 

8 - 1. docker network의 장점

 

컨테이너 이름 기반 통신

 

Docker 네트워크를 사용하면 컨테이너 이름을 호스트 이름으로 사용할 수 있다.

예를 들어, PostgreSQL 컨테이너 이름이 `postgres-250102` 라면,

Spring Boot 애플리케이션에서 `RDS_HOSTNAME=postgres-250102` 로 연결할 수 있다.

 

확장성

 

여러 컨테이너가 동일한 네트워크에 쉽게 추가될 수 있다.

 

실행해보자

docker network create todo-network

 

 

9. Postgres를 도커 이미지로 실행

물론, 방금 만든 network에서 실행시켜준다.

 

docker docker run --name postgres-250102 --network todo-network -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=password -e POSTGRES_DB=todos -p 5432:5432 -d postgres

 

 

10. Spring Boot 실행

docker run -p 8080:8080 --network todo-network -e RDS_HOSTNAME=postgres-250102 -e RDS_PORT=5432 -e RDS_DB_NAME=todos -e RDS_USERNAME=postgres -e RDS_PASSWORD=password griotold/todo-app:3.0

 

 

11. 결과

 

'인프라 > docker' 카테고리의 다른 글

Kompose 로 docker-compose.yml 을 쿠버네티스용 yaml 로 변환하고, 쿠버네티스에 배포하기  (0) 2025.01.17
2024 12 4 TIL - Docker Compose  (1) 2024.12.04
2024 12 3 - Docker로 Spring Boot Application 실행하기(Feat. Dockerfile)  (0) 2024.12.03
2024 12 2 TIL - Docker  (2) 2024.12.02
  1. 1. Todo 애플리케이션
  2. 2. application.yml
  3. 3. Dockerfile
  4. 4. build jar
  5. 5. docker build
  6. 6. docker tag
  7. 7. docker push
  8. 8. docker network
  9. 8 - 1. docker network의 장점
  10. 9. Postgres를 도커 이미지로 실행
  11. 10. Spring Boot 실행
  12. 11. 결과
'인프라/docker' 카테고리의 다른 글
  • Kompose 로 docker-compose.yml 을 쿠버네티스용 yaml 로 변환하고, 쿠버네티스에 배포하기
  • 2024 12 4 TIL - Docker Compose
  • 2024 12 3 - Docker로 Spring Boot Application 실행하기(Feat. Dockerfile)
  • 2024 12 2 TIL - Docker
Griotold
Griotold
Griotold
Griotold's Olive Oil
Griotold
전체
오늘
어제
  • 분류 전체보기 (89)
    • 테스트 (4)
      • Spock (1)
      • Junit (3)
    • 디자인 패턴 (1)
    • 깃 (2)
    • 리팩토링 (4)
    • 항해플러스 백엔드 5기 (3)
    • 인프런 워밍업 클럽 스터디 2기 백엔드 (4)
    • 코딩테스트 (10)
    • 자바 심화 2기 (7)
    • 백엔드 면접 질문 (19)
    • 인프라 (17)
      • docker (5)
      • CI, CD (5)
      • Monitoring (6)
      • AWS (1)
    • 데이터베이스 (1)
      • Redis (1)
    • 메시지큐 (3)
      • rabbitMQ (0)
      • kafka (3)
    • MSA (7)
    • JPA (1)
    • Spring (5)
      • Spring AI (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • CICD
  • 99클럽
  • JPA
  • Spring
  • micrometer
  • docker
  • 백엔드
  • 백준
  • 오블완
  • github
  • junit5
  • DATABASE
  • prometheus
  • TIL
  • githubactions
  • actuator
  • java
  • 프로그래머스
  • 개발자취업
  • 코딩테스트준비
  • backend
  • 이분탐색
  • 항해99
  • 티스토리챌린지
  • 읽기좋은코드
  • grafana
  • MSA
  • 자바
  • 리팩터링
  • 배포

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Griotold
docker로 Spring Boot App, Postgres 이미지 만들어서 실행시키기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.