Docker-Compose yaml파일을 이용하여 MySQL를 Local로 구축하기 - Database, Table 자동생성
이전글 : Docker-Compose yaml파일을 이용하여 MySQL를 Local로 구축하기
초기 Docker Container를 생성할때 초기 상태이다. 이때 미리 데이터베이스와 각각의 테이블을 생성할수 있다.
먼저 init.sql을 작성한다. 아래는 예시 sql문이다.
-- Create Users table
CREATE TABLE Users (
id serial PRIMARY KEY, -- 유저 고유 ID
nickname VARCHAR(255) UNIQUE NOT NULL, -- 유저 닉네임 고유값
password VARCHAR(255), -- 유저의 비밀번호
socialUser BOOLEAN, -- 소셜로그인 유저이면 true 입력
socialUserType VARCHAR(255), -- 소셜로그인 타입 ex) google
email VARCHAR(255) UNIQUE NOT NULL, -- 유저의 Email
refrashToken VARCHAR(255) UNIQUE, -- Access 토큰을 갱신한다.
created_at DATE,
updated_at DATE
);
-- Create Post table
CREATE TABLE Post (
id serial PRIMARY KEY,
type VARCHAR(255), -- 글의 타입. (공지글, 일반글). 공지글을 관리자만 작성이 가능하다.
title VARCHAR(255), -- 글의 title
body TEXT, -- 글의 내용
userId INT, -- 글 작성자
count INT DEFAULT 0, -- 조회수 (초기값은 0이다)
`like` INT DEFAULT 0, -- 좋아요
`hate` INT DEFAULT 0, -- 싫어요
created_at DATE,
updated_at DATE
);
-- Create JoinLikeHate table
CREATE TABLE JoinLikeHate (
userId BIGINT UNSIGNED,
postId BIGINT UNSIGNED,
status VARCHAR(255), -- like(좋아요), hate(싫어요)를 입력한다.
created_at DATE,
updated_at DATE,
PRIMARY KEY (userId, postId),
FOREIGN KEY (userId) REFERENCES Users(id),
FOREIGN KEY (postId) REFERENCES Post(id)
);
-- Create Tag table
CREATE TABLE Tag (
name VARCHAR(255) UNIQUE NOT NULL, -- 태그는 고유값이다.
created_at DATE -- 태그 생성날짜
);
-- Create JoinPostTag table
CREATE TABLE JoinPostTag (
postId BIGINT UNSIGNED,
tag VARCHAR(255),
CONSTRAINT PK_JoinPostTag PRIMARY KEY (postId, tag),
FOREIGN KEY (postId) REFERENCES Post(id),
FOREIGN KEY (tag) REFERENCES Tag(name)
);
-- Create Comment table
CREATE TABLE Comment (
commentId serial PRIMARY KEY,
postId BIGINT UNSIGNED, -- 게시글 ID
linkId BIGINT UNSIGNED, -- 대댓글 ID
userId BIGINT UNSIGNED, -- 유저ID
body TEXT, -- 댓글 내용
created_at DATE,
updated_at DATE,
FOREIGN KEY (postId) REFERENCES Post(id),
FOREIGN KEY (linkId) REFERENCES Comment(commentId),
FOREIGN KEY (userId) REFERENCES Users(id)
);
.yaml파일을 수정한다.
# 참고 링크 : https://hub.docker.com/_/mysql
services:
mysql:
# 컨테이너의 베이스가 될 이미지를 받는다(현재 docker-compose.yaml은 mysql 8.2.0버전을 사용한다.)
image: mysql:8.2.0
volumes:
# mysql의 데이터의 초기화를 방지하기 위해 볼륨으로 저장한다.
- mysql_data:/var/lib/mysql
# mysql 서비스 정의에 init.sql 파일을 볼륨으로 마운트하는 구문을 추가.
# 초기화 스크립트는 MySQL 데이터 볼륨이 비어 있을 때만 실행됩니다. 이미 데이터가 있는 경우, 스크립트는 실행되지 않습니다.
- init.sql:/docker-entrypoint-initdb.d/init.sql
environment: # DB 환경을 생성한다.
MYSQL_DATABASE: mydatabase # mydatabase 데이터베이스를 생성한다.
env_file:
# yaml의 상대경로로 환경변수 파일을 찾는다.
- ./.mysql.env
ports:
# 외부에 포트를 노출시킨다. mysql의 default포트는 3306이고 4500포트로 외부에 노출시킨다.
- "${MYSQL_PORT}:3306"
# 네이밍 볼륨이 있을시 반드시 루트에 한번더 volumes 안에 해당 네이밍 볼륨 이름을 넣는다.
volumes:
# mysql은 mysql_data라는 네이밍 볼륨을 사용하기 때문에 아래에 추가해준다.
mysql_data:
도커 컨테이너에 bash로 접속해서 확인한다.
gitHubLink : https://github.com/Alex-Choi0/RDBMS_DockerCompose/tree/init_database
댓글
댓글 쓰기