-
[Mariadb]Docker를 이용하여 MAIRADB BINARY 설치 가이드 문서LINUX/Docker 2015. 5. 20. 17:06728x90
Docker를 이용하여 MAIRADB BINARY 설치 가이드 문서
시작전 확인 사항
- OS : CentOS 7 64BIT
- SOFTWARE : docker
- MariadDB 설치 위치 : /usr/local/mysql
Binary 설치 파일이란?
RPM이나 YUM 등을 이용하지 않고 이미 tar 형태의 binary 파일을 압축을 풀어서 사용하는 방식이다.
- 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'LINUX > Docker' 카테고리의 다른 글
[Docker] FTP 서버 구축 하기 (0) 2015.10.14 [Docker] nginx 1.9.2 설치 하기 (0) 2015.06.17 docker 에서 IMAGE, CONTAINER 위치 변경 (0) 2015.05.16 Docker를 이용한 웹서비스 구축 (0) 2015.05.11 [Docker]맛보기 (0) 2015.02.24