일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- string
- set
- Properties
- NIO
- JPA
- 스프링부트
- alter
- Union-find
- Java
- priority_queue
- 리소스모니터링
- dfs
- List
- math
- sql
- scanner
- spring boot
- 스택
- GC로그수집
- html
- javascript
- BFS
- map
- deque
- 힙덤프
- union_find
- 큐
- CSS
- date
- Calendar
- Today
- Total
매일 조금씩
Spring boot 에서 docker로 mariadb 세팅, 사용 본문
API를 개발하면서 docker와 docker compose를 처음 다루었는데
까먹지 않기 위해 기록해둔다.
다음 과정은 docker가 깔려있다는 가정하에 진행된다.
docker를 설치하면 docker compose가 내장되어 있다.
1. Spring boot Application 생성
내가쓰는 IntelliJ에서 Spring boot 프로젝트를 하나 만든다.
spring web만 dependencies에 추가하여 만들었다.
2. docker-compose.yaml 작성
다음으로 프로젝트내에 docker-compose라는 이름의 yaml(또는 yml)파일을 만든다.
> docker-compose.yaml
version: '3.8'
services:
db:
image: mariadb
container_name: meeting-document-db
restart: always
environment:
MYSQL_DATABASE: 'meeting_document'
MYSQL_PASSWORD: 'root'
MYSQL_ROOT_PASSWORD: '1234'
ports:
- '3306:3306'
networks:
- meeting-document-network
healthcheck:
test: "/usr/bin/mysql --user=root --password=root --execute \"SHOW DATABASES;\""
interval: 2s
timeout: 20s
retries: 10
volumes:
- ./data:/docker-entrypoint-initdb.d
# application:
# container_name: meeting-document-application
# build:
# context: ./
# dockerfile: Dockerfile
# ports:
# - "8080:8080"
# networks:
# - meeting-document-network
# depends_on:
# - "db"
networks:
meeting-document-network:
name: meeting-document-network
driver: bridge
프로젝트에 docker-compose.yml 파일을 만들어서 위와 같이 작성한다.
- db : database 설정 부분 (db로 네이밍)
- application : spring boot 서비스 설정 (application으로 네이밍)
1) database 설정 부분
image : mariadb 이미지를 사용 (뒤에 버전을 명시하지 않으면 최신 버전으로 사용)
environment (mariadb 환경변수 지정) :
- MYSQL_DATABASE: meeting_document란 이름의 데이터베이스 생성
- MYSQL_ROOT_PASSWORD: root password 지정
ports : 외부로 노출할 포트 지정 'host port : container port'가 됨. (3306:3306)
networks : 컨테이너 간 통신을 컨테이너의 이름으로 하기 위해서는 custom_network를 생성하고 해당 network에 컨테이너를 생성해야 한다.
2) spring boot 서비스 설정 (application으로 네이밍)
build : 빌드에 대한 키워드 정의
ports : host의 8080 포트를 컨테이너의 8080 포트와 매핑한다.
depends_on :
- 의존성 추가, 스프링 부트는 실행할 때 database connection을 요청함.
- 따라서 mariadb 컨테이너가 로드된 후 접속을 시도할 수 있게 추가해줌
environment :
도커의 경우 각 컨테이너별 개별 ip를 할당받기 때문에
스프링 환경변수로 접속할 db의 url을 지정해 준다.
- SPRING_DATASOURCE_URL : 접속할 db의 url 지정, 위에서 지정한 데이터베이스 서비스 네임을 사용해도 됨.
- SPRING_DATASOURCE_USERNAME : 사용자 이름
- SPRING_DATASOURCE_PASSWORD : 사용자 비밀번호
networks : database 설정에서 설명한 내용과 동일.
3) networks
compose에 사용할 네트워크 meeting-document-network를 생성함.
3. application.properties 에 mariadb configuration 추가
# create, update, validate, none
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.database=mysql
# mariadb configuration
spring.datasource.url=jdbc:mariadb://localhost:3306/meeting_document?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#spring.servlet.multipart.location=/Users/hyunseokoh/git/teespace/meeting-document-server/documents
spring.servlet.multipart.max-file-size=100MB
위와 같이 mariadb configuration을 적어준다.
4. 소스 빌드 후 실행
1) 프로젝트 안에서 git bash를 실행시킨 후, docker-compose up 명령어를 실행시킨다.
docker 실행 명령어
// -d 붙이면 백그라운드로 실행
$ docker-compose up -d
// 상태 체크
$ docker-compose ps
// stop, start
$ docker-compose stop
$ docker-compose start
// docker-compose 서비스 제거
$ docker-compose down (volumn, network 까지 다 삭제)
// 서비스 중인 컨테이너의 로그 확인
$ docker-compose logs
다음과 같이 docker ps로 container_id를 알아낸후
git bash를 하나 더 띄워서
다음 명령어로 docker 서버에 접속해서 설정해둔 database에 root 로 접속한다.
$ docker exec -it (CONTAINER_ID) bash
'Spring Framework' 카테고리의 다른 글
[스프링 부트] application.properties 세팅 참고 (0) | 2021.12.22 |
---|---|
[스프링] batch + scheduler로 주기적인 파일 삭제 구현 (1) | 2021.12.20 |
Spring boot 에서 JPA 세팅 (application.properties 설정) (0) | 2021.12.14 |
Spring boot와 JPA로 파일 업로드 API 구현(서버/DB에 저장, PDF를 이미지, 이미지를 썸네일로 변환) (0) | 2021.12.13 |
인텔리제이 스프링 부트 initializr (0) | 2021.08.01 |