#install#설치#default#기본
https://hub.docker.com/r/library/mariadb/tags/
$ docker pull mariadb
$ docker pull mariadb:10.3.10
https://github.com/docker-library
https://github.com/docker-library/mariadb
https://github.com/docker-library/mariadb/blob/master/10.3/Dockerfile
※ 디폴트 옵션인 MYSQL_ROOT_PASSWORD 는 ROOT패스웨드로 반드시 설정해야 한다.
$ docker run -d --name mymaria -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb
※ 기동시 별도 유저와 데이터베이스를 같이 설정할려면 아래와 같이 실행
$ docker run -d --name mymaria -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb
-e MYSQL_DATABASE=mydb
mydb라는 데이터베이스를 생성한다.
-e MYSQL_USER=user1
user1 이라는 사용자 생성
-e MYSQL_PASSWORD=8888
user1의 패스워드 생성
-e MYSQL_ROOT_PASSWORD=9999
root 패스워드
※ 생성한 컨테이너에 접속해 env 명령어를 실행하면 환경변수들의 값을 확인 가능
$ docker exec -it mymaria bash
# env
※ MariaDB에 접속해 본다.
# mysql -u root -p
or
# mysql -u user1 -p
※ 디렉토리 /docker-entrypoint-initdb.d/ 에 .sql 또는 .sh 파일을 넣어두면 컨테이너 생성시 실행하게 되어있다.
ex) 호스트머신의 /home/docker/sql 폴더에 test.sql 파일을 아래와 같이 생성한다.
**** /home/docker/sql/test.sql ****
CREATE TABLE USERS(ID INT, NAME VARCHAR(128));
INSERT INTO USERS(ID, NAME) VALUES(1, 'aa1');
INSERT INTO USERS(ID, NAME) VALUES(2, 'bb2');
INSERT INTO USERS(ID, NAME) VALUES(3, 'cc3');
INSERT INTO USERS(ID, NAME) VALUES(4, 'dd4');
INSERT INTO USERS(ID, NAME) VALUES(5, 'ee5');
INSERT INTO USERS(ID, NAME) VALUES(6, 'ff6');
※ 위 호스트머신 폴더를 컨테이너에 볼륨마운트 시키면 된다.
docker run -d --name mymaria -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb
※ mariadb공식 이미지의 MariaDB 데이터 저장소는 /var/lib/mysql 디렉토리 이다.
즉, /var/lib/mysql 볼륨 디렉토리를 갖는 데이터컨테이너를 만들고 MariaDB컨테이너에 볼륨으로 매핑하면 된다.
$ docker create -it -v /var/lib/mysql --name maria_vol busybox
MariaDB 컨테이너를 생성
$ docker run -d --name mymaria --volumes-from maria_vol -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb
※ DB에 접속해서 데이터를 추가해 본다.
$ docker exec -it mymaria bash
# mysql -u user1 -p
MariaDB [(none)]> use mydb;
MariaDB [mydb]> insert into USERS(id,name) values(10, 'emunhi');
MariaDB [mydb]> insert into USERS(id,name) values(20, 'Hong Gil Dong');
MariaDB [mydb]> insert into USERS(id,name) values(30, 'Dully');
MariaDB [mydb]> commit;
※ MariaDB는 설정파일에서 /etc/mysql/conf.d/my.cnf 를 읽어들인다.
즉, my.cnf 파일을 만들어 /etc/mysql/conf.d 에 볼륨으로 매핑시킨다.
vi /home/docker/conf/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
위에서 만든 파일을 볼륨매핑해서 다시 시작한다.
※ 주의
이미 생성된 데이터베이스에 문자셋을 변경해서 다시시작해도 이전 문자셋이 남아 있으므로 데이터볼륨과 데이터베이스컨테이너를 만들기 전에 문자셋을 설정해 놔야한다.
$ docker create -it -v /var/lib/mysql --name maria_vol busybox
$ docker run -d --name mymaria --volumes-from maria_vol -v /home/docker/conf:/etc/mysql/conf.d -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb
$ docker run --rm --volumes-from maria_vol -v $(pwd):/back busybox tar cvf /back/maria.tar /var/lib/mysql
호스트머신의 현재 디렉토리$(pwd) 에 maria.tar 로 파일생성 압축 대상은 데이터 컨테이너의 /var/lib/mysql 디렉토리
$ docker stop mymaria
$ docker rm mymaria
$ docker rm maria_vol
$ docker create -it -v /var/lib/mysql --name maria_vol2 busybox
$ docker run --rm --volumes-from maria_vol2 -v $(pwd):/back busybox tar xvf /back/maria.tar -C /var/lib/mysql
**** 압축해제시 디렉토리도 같이 풀리므로 루트로 잡아 줘야 제대로 풀린다.
/var/lib/mysql을 붙이면 /var/lib/mysql/var/lib/mysql 아래에 풀린다.
$ docker run -d --name mymaria --volumes-from maria_vol2 -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb
백업받아놓은 파일에서 추가/갱신된 DB데이터가 있는지 확인을 한다.
정상적으로 복원되어 있는 것을 확인하면 OK
$ docker exec -it mymaria /bin/bash
# mysql -u user1 -p
MariaDB [(none)]> use mydb;
MariaDB [mydb]> select * from USERS;