도커 컴포즈를 통해 MySQL 컨테이너 생성 및 데이터 삽입
docker-compose 파일 작성
docker-compose 를 통해 mysql 컨테이너를 띄우기 위한 파일을 작성한다.
# docker-compose.yml
version: "3.8"
services:
mysql:
container_name: mysql_local
image: mysql:8.0.30
volumes:
- ./db/conf.d:/etc/mysql/conf.d
- ./db/initdb.d:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=pass_local
- MYSQL_USER=pass_local_user
- MYSQL_PASSWORD=passlocal123
- MYSQL_ROOT_PASSWORD=passlocal123
- TZ=Asia/Seoul
# env_file: .env # 이와같이 환경변수를 docker-compose.yml에 작성하지 않고 별도 파일로 분리하여 등록할 수도 있다.
환경변수 파일을 .env
와 같이 분리하게 되면 내용은 다음과 같다.
# .env
MYSQL_DATABASE=pass_local
MYSQL_USER=pass_local_user
MYSQL_PASSWORD=passlocal123
MYSQL_ROOT_PASSWORD=passlocal123
TZ=Asia/Seoul
mysql 설정 파일 작성
mysql 설정 파일을 작성하여 컨테이너 생성시 해당 설정을 따르도록 한다.
# ./db/conf.d/my.cnf
# MySQL8 default character set = utf8mb4 이므로 client만 선언
[client]
default-character-set = utf8mb4
# MySQL8 default authentication policy = caching_sha2_password
# 이를 지원하지 않는 DB Client로 접속하기 위해서 기존 정책인 `mysql_native_password`로 설정
[mysqld]
authentication-policy = mysql_native_password
테이블 생성 sql 파일 작성
테이블 생성 sql 파일을 작성하여 컨테이너 생성 및 설정 완료시 해당 파일을 통해 테이블을 생성하도록 한다.
# ./db/initdb.d/create_table.sql
CREATE TABLE `users`
(
`user_id` int NOT NULL AUTO_INCREMENT COMMENT '유저 식별값',
`username` varchar(30) NOT NULL COMMENT '유저 로그인 아이디',
`password` varchar(50) NOT NULL COMMENT '유저 패스워드',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
`modified_at` timestamp DEFAULT NULL COMMENT '수정 일시',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='유저';
...
데이터 삽입 sql 파일 작성
데이터 삽입 sql 파일을 작성하여 컨테이너 생성, 설정 완료, 테이블 생성 완료시 데이터를 삽입하도록 한다.
# ./db/initdb.d/insert_data.sql
INSERT INTO `user` (username, password, create_at)
VALUES ('user1', 'password1', '2022-08-01 00:00:00'),
('user2', 'password2', '2022-08-01 00:00:00'),
('user3', 'password3', '2022-08-01 00:00:00');
...
원격 접속 허용이 필요하다면 여기를 참고하자.
(선택사항) Makefile 파일 작성
Makefile
은 어떤 조건으로 명령어를 실행할지 담은 파일이다.
Makefile
을 작성하면 make [작성한 명령어]
명령을 통해 Makefile
에 작성해둔 명령을 단축어처럼 사용할 수 있다.
# -d: 백그라운드 실행, --force-recreate: 강제 재생성
db-up:
docker-compose up -d --force-recreate
# -v: volume 삭제
db-down:
docker-compose down -v
Makefile 작성을 완료했다면 해당 파일이 위치한 디렉토리에서 make db-up
명령을 통해 docker-compose
를 실행하여 컨테이너를 생성하고, make db-down
명령을 통해 docker-compose
를 통해 생성된 컨테이너를 내릴 수 있다.