자세한 사용법은 공식 문서에 자세히 나와있고, 여기서는 대략적인 사용법에 대해서만 다룬다.
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경로에 복사해준다.
ENV MYSQL_ROOT_PASSWORD=*
루트 패스워드를 설정하는 환경변수로, 해당 MYSQL_ROOT_PASSWORD 환경변수 설정이 없으면 컨테이너 실행이 되지 않는다.