본문 바로가기

Docker Tip mariadb 초기 설정

자세한 사용법은 공식 문서에 자세히 나와있고, 여기서는 대략적인 사용법에 대해서만 다룬다.

참고 링크

 

Mariadb - Official Image | Docker Hub

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

Example

FROM mariadb:10.5

COPY ./DB_container/sql /docker-entrypoint-initdb.d
COPY ./DB_container/master_cnf/custom.cnf /etc/mysql/conf.d
COPY ./DB_container/master_cnf/my.cnf /etc/mysql/my.cnf
COPY ./DB_container/scheduling /workspace
COPY ./DB_container/docker-entrypoint.sh /usr/local/bin/

WORKDIR /workspace

RUN apt-get update -y  
RUN apt-get upgrade -y  
RUN apt-get install git vim -y 
RUN apt-get install cron -y
RUN mkdir /backup
RUN chmod 755 /workspace/backup.sh
RUN crontab /workspace/schedule.txt

ENV MYSQL_ROOT_PASSWORD ***********

 

COPY ./{something} /docker-entrypoint-initdb.d 

컨테이너 실행시 사용할 DB(dumped sql파일)을 docker-entrypoint-initdb.d에 넣어둘 경우 컨테이너가 생성되면서, 해당 sql파일을 실행한다.

사용할 DB의 export된 dumplfile(*.sql)을 보유하고있다면, 해당 dumpfile을 /docker-entrypoint-initdb.d 디렉토리로 카피한다.
단 dumpfile에는 DB를 선언하는 구문과, 사용하는 구문이 있어야 한다.

CREATE DATABASE IF NOT EXISTS `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `db1`;
 

COPY ./{some.cnf} /etc/mysql/conf.d

커스텀 설정을 위한 cnf 파일들은 /etc/mysql/conf.d 경로에 추가하여 설정을 할 수 있다.

#한글 사용을 위한 UTF8 charset
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

  

 

만약 dumpfile의 크기가 너무 큰경우 한번에 입력할 수 있는 명령의 길이 제한 때문에 오류가 뜰 수 있다. 그럴경우 해당 쿼리문을 dumpfile의 맨 위에 추가하여 한번에 처리할 수 있는 명령의 길이를 늘려준다.

SET GLOBAL max_allowed_packet = 1024*1024*n;
 

WARINNING! 이 값은 너무 크게 잡으면 메모리 소비가 많아질 수 있음.

COPY ./my.cnf /etc/mysql 

mariadb의 설정파일을 그대로 사용하고 싶을때 my.cnf 파일을 /etc/mysql 디렉토리에 넣어두면 된다.

#my.cnf 예시
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock

# Import all .cnf files from configuration directory
[mariadbd]
skip-host-cache
skip-name-resolve

!includedir /etc/mysql/mariadb.conf.d/
!includedir /etc/mysql/conf.d/

log-bin
server_id=1
log-basename=master1
binlog-format=mixed

 

COPY ./DB_container/docker-entrypoint.sh /usr/local/bin/

 

mariadb 이미지는 entrypoint로 docker-entrypoint.sh 스크립트를 실행하게 되있다. 

만약 이미지에 추가적인 설정을 해야한다면, docker-entrypoint.sh 파일을 수정 후, COPY를 통해 /usr/local/bin경로에 복사해준다.

cron 사용을 위해 2행에 service cron start 명령을 실행함.

ENV MYSQL_ROOT_PASSWORD=* 

루트 패스워드를 설정하는 환경변수로, 해당 MYSQL_ROOT_PASSWORD 환경변수 설정이 없으면 컨테이너 실행이 되지 않는다.