Docker MariaDB 컨테이너 생성하기

Intae Lim·2022년 3월 3일
0

Docker MariaDB 컨테이너 생성

1. 컨테이너 마운트 디렉터리 생성

$ mkdir /home/lim/opt/temp/mariadb/data
$ mkdir /home/lim/opt/temp/mariadb/etc/mysql

2. 도커 컨테이너 생성

$ docker container run -d -p 13306:3306 \
 -e MYSQL_ROOT_PASSWORD=temp_root_password \
 -e MYSQL_DATABASE=temp_db \
 -e MYSQL_USER=temp_user \
 -e MYSQL_PASSWORD=temp_user_password \
 -e TZ=Asia/Seoul \
 -v /home/lim/opt/temp/mariadb/data:/var/lib/mysql \
 -v /home/lim/opt/temp/mariadb/etc/mysql:/etc/mysql \
 --name temp_mariadb mariadb \


컨테이너 생성 이후 추가된 파일구조

3. my.cnf 생성

$ sudo vi /home/lim/opt/temp/mariadb/etc/mysql/my.cnf
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
lower_case_table_names         = 1

lower_case_table_names 옵션의 자세한 내용은 여기

4. 도커 컨테이너 재시작

$ docker restart temp_mariadb

5. 설정이 제대로 적용되었는지 확인

  • 도커 컨테이너 접속
$ docker exec -it temp_mariadb bash
  • 설정값 확인
$ mysql -u root -p
$ status

  • 테이블 대소문자 구분 옵션 적용여부 확인
$ show variables like 'lower_case_table_names';

6. 권한 부여

데이터베이스와 사용자는 docker 컨테이너 생성 시 생성되었습니다.
생성되어져있는 사용자에 권한을 부여합니다.


user 테이블 definer가 mariadb.sys 이기때문에 유저 테이블 insert가 안된다.
mariadb 상위버전부터는 user 테이블이아닌 view로 바뀌어서 생기는 문제
create user 및 grant를 활용해서 외부접속처리를 하였다.

$ grant all privileges on temp_db.* to temp_user@'%';
$ flush privileges;

7. sys 계정 설정

$ set password for 'mariadb.sys'@'localhost' = password('temp_sys_password');

8. 커넥션 테스트

컨테이너가 서버에 올라갔으니 커넥션테스트를 해봅니다.

docker-compose를 이용한방법

Docker compose를 사용 시 더욱 간편하게 DB컨테이너의 생성이 가능합니다.

1. 컨테이너 마운트 디렉터리 생성

$ mkdir /home/lim/opt/temp/mariadb 
$ mkdir /home/lim/opt/temp/mariadb/etc 
$ mkdir /home/lim/opt/temp/mariadb/var

2. my.cnf 설정파일 생성 및 수정

$ /home/awalab/opt/safety-guide/database/etc/mysql/conf.d/my.cnf
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
lower_case_table_names         = 1

3. docker-compose.yml 파일 생성

$ vi /home/lim/opt/temp/mariadb/docker-compose.yml
version: '3.1'

services:
  db:
    container_name: temp_mariadb
    image: mariadb:10.5.6
    restart: always
    ports:
      - 3348:3306
    volumes:
      - /home/lim/opt/temp/mariadb/etc/mysql/conf.d:/etc/mysql/conf.d:ro
      - /home/lim/opt/temp/mariadb/var/lib/mysql:/var/lib/mysql
      - /home/lim/opt/temp/mariadb/var/log/maria:/var/log/maria
    environment:
      MYSQL_PORT: 3306
      MYSQL_ROOT_PASSWORD: temp_root_password
      TZ: Asia/Seoul
  1. docker-compose 실행
$ docker-compose up -d
profile
Backend Developer.

0개의 댓글