LINUX/Docker

[Mariadb]Docker를 이용하여 MAIRADB BINARY 설치 가이드 문서

lahuman 2015. 5. 20. 17:06
728x90

Docker를 이용하여 MAIRADB BINARY 설치 가이드 문서


시작전 확인 사항

  - OS : CentOS 7 64BIT 

  - SOFTWARE : docker

  - MariadDB 설치 위치 : /usr/local/mysql


Binary 설치 파일이란?

RPM이나 YUM 등을 이용하지 않고 이미 tar 형태의 binary 파일을 압축을 풀어서 사용하는 방식이다.



1. MARIADB BINARY DOWNLOAD

- MariaDB Binary 파일을 준비 한다.


[그림 1]


    + [그림 1]에서 처럼 자신의 OS에 알맞은 바이너리 파일을 다운 받는다.

    + 다운 받은 파일을 Dockerfile과 같은 위치에 압축을 풀어 둔다.

    * docker 에서는 tar.gz 을 upload 할 경우 압축이 풀린 디렉토리로 표출되는 버그가 있다.



2. 설치 준비 

  - Dockerfile 

    + 우선 MariaDB에서 필요한 내용을 update 한다. 

     필요한 파일을 컨테이너로 업로드 하고, mysql 사용자를 추가하고 MariaDB 에서 제공되는 스크립트를 실행한다. (실행시 위치에 대한 설정을 한다.)

     마지막으로 업로드한 run.sh 파일을 실행한다.

#mariadb binary install

FROM centos:centos7
MAINTAINER mariadb by lahuman 

RUN yum -y update; yum clean all
RUN yum -y install epel-release tar ; yum clean all
RUN yum -y install libaio hostname ; yum clean all

RUN groupadd mysql
RUN useradd -g mysql mysql
ADD mariadb-10.0.17-linux-x86_64 /usr/local/mariadb-10.0.17-linux-x86_64
RUN ln -s /usr/local/mariadb-10.0.17-linux-x86_64 /usr/local/mysql
ADD my.cnf /usr/local/mysql/my.cnf
ADD run.sh /usr/local/mysql/run.sh
ADD init.sql /usr/local/mysql/init.sql
RUN chown -R mysql /usr/local/mysql
RUN chgrp -R mysql /usr/local/mysql

RUN /usr/local/mysql/scripts/mysql_install_db  --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

RUN chown -R root /usr/local/mysql
RUN chown -R mysql /usr/local/mysql/data

EXPOSE 3306

CMD ["/bin/bash", "/usr/local/mysql/run.sh"]


  - my.cnf

    + my.cnf 파일은 서버의 크기에 따라 알맞은 파일을 이용하면 된다.

      파일 위치는 압축을 푼 위치 에서 /mariadb-10.0.17-linux-x86_64/support-files 아래 보면 다음과 같이 확인이 가능하다


[그림 2]

      - my-huge.cnf : 아주 큰 DB

      - my-innodb-heavy-4G.cnf : 4G 이상의 DB

      - my-innodb-large.cnf : 큰 DB

      - my-medium.cnf : 보통의 DB

      - my-small.cnf : 작은 DB

    + 진행하려는 타입의 파일을 다음 명령어를 이용하여 Dockerfile 과 같은 위치로 이동을 한다.

cp my-medium.cnf ../../my.cnf

   + 이후 케릭터셋 설정과 테이블명에 대한 대소문자 구분 안하도록 하는 설정을 추가 하였다(옵션)

[mysqld]
#추가 내용
# 테이블 대소문자 구분 안함
lower_case_table_names=1
# 케릭터셋을 utf8로 변경
character-set-server=utf8
collation-server=utf8_general_ci


  - run.sh

   + Dockerfile에서 mariadb를 기동 할 경우 이상하게 에러가 나면서 종료되어 꼼수(?)로 run.sh 파일을 만들고 그 파일에서 기동을 하도록 수정 하였다.

#!/bin/bash

/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf --user=mysql


  - init.sql

    + 컨테이너를 기동하고 초기 DB에 대한 설정을 진행

     다음 SQL 내역은 ROOT 에 대한 HOST 권한을 추가 하는 것과 test 테이블에 대한 삭제를 진행하는 명령어 이다.

GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
DROP DATABASE IF EXISTS test ;

FLUSH PRIVILEGES ;


3. Docker 

  - 이미지 생성

    +  Dockerfile 이 있는 곳에서 다음 이미지 생성 명령어를 실행 한다.

docker build --rm -t lahuman/mariadb .

  - 컨테이너 생성 & 실행

    + 이미지가 생성 완료 되었다면, 컨테이너를 생성 & 실행 한다. MariadDB의 /data 위치를 volume으로 사용 가능하도록 설정하고, 컨테이너를 추가 한다. volume를 사용할 경우 컨테이너에 대한 설정 변경시 설정된 DB 정보를 재활용 할 수 있다.

# /usr/local/mysql/data 디렉토리를 volume으로 할 수 있도록 설정
docker run --name=mariadb-data -v /usr/local/mysql/data lahuman/mariadb true

    + 만들어진 volume을 가지고 컨테이너 생성

docker run --name=mariadb -d -it -p 3306:3306 --volumes-from=mariadb-data1 lahuman/mariadb


  - MariaDB 설정 

# 생성된 컨테이너로 접근
 docker exec -it lahuman/mariadb /bin/bash

# root password 설정
/usr/local/mysql/bin/mysqladmin -u root password 'password'

# 초기 sql 실행
/usr/local/mysql/bin/mysql -u root -ppassword < /usr/local/mysql/init.sql

# DB 컨테이너 나오기
exit


  - 다른 컨테이너와 연동

    + 컨테이너 생성시 MariaDB 컨테이너와 연동을 하려면 컨테이너 생성시 다음과 같이 --link를 설정하여야 한다.

docker run --name lahuman --link mariadb:mariadb -d -p 80:80 lahuman/home:centos7

    + host 컨테이너에서 연결시 다음과 같이 --link로 명명된 이름을 사용한다.

db.jdbcUrl=jdbc:mariadb://mariadb:3306/doc4sm?useUnicode=true&characterEncoding=utf8&autoReconnect=true


이상으로 Docker를 이용한 MariaDB BINARY 설치 글을 마친다.

Docker를 제외하면 MariaDB BINARY 설치 방법과 같다

개인적으로 BINARY 설치 방법을 선호 하는데 이유는 특정 폴더에 내가 원하는 설정을 다 몰아 넣어서 이다.



참고 URL:

http://sarc.io/index.php/mariadb/298-mariadb-build-troubleshooting-2

https://mariadb.com/kb/en/mariadb/mysql_install_db/

https://mariadb.com/kb/en/mariadb/installing-system-tables-mysql_install_db/


https://mariadb.com/kb/en/mariadb/binary-packages/

https://mariadb.com/kb/en/mariadb/installing-mariadb-binary-tarballs/

728x90