새소식

docker

[Docker] MySQL 컨테이너에 초기 데이터 삽입

  • -

도커 컴포즈를 통해 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를 통해 생성된 컨테이너를 내릴 수 있다.

'docker' 카테고리의 다른 글

[Docker] MySQL 컨테이너 띄우고 원격 접속 허용하기  (0) 2023.01.15
[Docker] Docker Volume  (0) 2022.12.10
[Docker] Docker-Compose  (0) 2022.12.09
[Docker] MySQL 컨테이너에 초기 데이터 삽입

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.