1. Todo 애플리케이션
간단한 Todo 애플리케이션을 만든다.
JSON을 반환하는 REST API application.
아주 간단해서 생략....
https://github.com/in28minutes/kubernetes-crash-course/tree/master/03-todo-web-application-mysql
위의 자료는 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 (1) | 2024.12.02 |