YS's develop story
Spring, Docker에서 MySQL 데이터베이스 컨테이너 설정하기 본문
docker-compose.yml 설정 파일
version: '3'
services:
travel-db:
container_name: test
build:
context: ./database
dockerfile: Dockerfile
ports:
- "3307:3306"
restart: always
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
timeout: 30s
retries: 3
networks:
- network
networks:
network:
container_name -> 컨테이너의 이름을 test로 설정합니다.
build 섹션: 도커 이미지를 빌드하는 데 필요한 설정입니다.
- context: ./database: Dockerfile 및 다른 빌드 컨텍스트 파일이 있는 디렉터리를 지정합니다.
- dockerfile: Dockerfile: 사용할 Dockerfile의 이름을 지정합니다.
ports: - "3307:3306": 호스트의 포트 3307을 컨테이너의 포트 3306으로 매핑합니다.
restart: always: 컨테이너가 종료되면 항상 다시 시작되도록 설정합니다.
healthcheck: 컨테이너의 상태를 확인하는 데 사용됩니다.
- test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]: MySQL 서버에 ping을 보내는 테스트 명령을 정의합니다.
networks: - network: networks 섹션에서 정의한 network에 컨테이너를 연결합니다.
이렇게 docker-compose.yml 파일을 사용하면 docker-compose up 명령을 통해 MySQL 데이터베이스 컨테이너를 시작하고 설정할 수 있습니다.
컨테이너는 호스트의 3307 포트를 통해 액세스 할 수 있고, Docker Compose는 정의된 네트워크를 통해 컨테이너 간 통신을 관리합니다.
최상단에 database폴더를 만들고 Dockerfile 생성
Dockerfile
FROM mysql:latest
MAINTAINER liyusang799@gmail.com
COPY init.sql /docker-entrypoint-initdb.d
ENV MYSQL_ROOT_PASSWORD=root
VOLUME /var/lib/mysql
EXPOSE 3307
FROM mysql:latest
이 부분은 기본 이미지로서 공식 MySQL Docker 이미지를 사용한다는 것을 나타냅니다.
latest 태그를 사용하여 가장 최근 버전의 MySQL 이미지를 기반으로 컨테이너를 생성합니다.
MAINTAINER liyusang799@gmail.com
MAINTAINER는 이미지의 작성자를 나타냅니다.
COPY init.sql /docker-entrypoint-initdb.d
COPY 명령어는 로컬 파일 시스템의 init.sql 파일을 컨테이너 내부의 /docker-entrypoint-initdb.d디렉터리로 복사합니다. 이 디렉터리는 MySQL 컨테이너가 초기화 SQL 스크립트를 실행하는 데 사용되는 특별한 디렉터리입니다.
ENV MYSQL_ROOT_PASSWORD=root
이 부분은 MySQL 루트 사용자의 비밀번호를 설정합니다.
VOLUME /var/lib/mysql
이 명령어는 MySQL이 데이터를 저장하는 디렉터리를 볼륨으로 지정합니다.
데이터베이스 파일과 같은 영속적인 데이터를 저장하기 위해 볼륨을 사용하는 것이 좋습니다.
EXPOSE 3307
이 명령어는 Docker 컨테이너가 호스트 머신에 노출할 포트를 지정합니다. 여기에서는 MySQL이 사용하는 기본 포트인 3306을 3307로 매핑하고 있습니다. 호스트와 컨테이너 간의 포트 매핑을 통해 호스트에서 MySQL 서버에 접근할 수 있습니다.
init.sql
alter user 'root'@'localhost' identified with caching_sha2_password by 'root';
flush privileges;
create database if not exists travel;
use travel;
application.yml
spring:
profiles:
include:
core
active: dev
config:
import: optional:file:.env[.properties]
application-core.yml
server:
port: 8080
error:
include-message: always
application-dev.yml
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/travel?characterEncoding=UTF-8
username: root
password: root
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
dialect: org.hibernate.dialect.MySQLDialect
logging:
level:
"[org.springframework.security]": DEBUG
org.hibernate.SQL: DEBUG
이제 docker-compose.yml 파일 실행 후 spring 실행해서 생성해 두었던 Entity가 생성되는지 확인해 볼 것입니다.
docker-compose.ym 실행 -> 컨테이너가 잘 생성된 모습
아까 설정했었던 값으로 연결 및 Test Connection 성공
Spring 실행 시 생성해 두었던 Entity들을 jpa가 테이블로 생성해 주는 것을 확인
'Spring' 카테고리의 다른 글
spring jpa에 Querydsl 적용하기 [spring 3.1.5, java 17] (0) | 2023.12.06 |
---|---|
springboot certbot으로 ssl인증서 받아서 https로 배포하기 (1) | 2023.11.30 |
GCP 에서 springboot 프로젝트 docker로 배포하기 (1) | 2023.11.25 |
[Spring] request시 notnull값 controllerAdvice로 처리해서 response보내기 (1) | 2023.11.24 |
Jpa @CreatedDate, @LastModifiedDate 어노테이션이 적용 (0) | 2023.11.22 |