0%

Docker로 MariaDB 사용하기

도커 컨테이너에 MariaDB를 올려서 데이터베이스를 구축합니다.


이번 글에서는 MariaDB에 대해 간단하게 알아보고 도커 컨테이너에 MariaDB를 올려 데이터베이스 구축하는 방법에 대해서 살펴볼 것이다. 해당 글은 도커가 이미 깔렸다는 전제 하에 설명하기 때문에 만약 도커가 없다면 다운받아야 한다.

Database란

데이터베이스(Database, DB)는 여러 사람들이 사용할 목적으로 통합하고 관리하는 데이터 집합을 말하며, 대부분 관계형 데이터베이스(Relational Database, RDB) 형태로 많이 사용하고 있다. 관계형 데이터베이스란 데이터를 컬럼(column)과 로우(row)를 이루는 하나 이상의 테이블(또는 관계)로 정리하는 방식이며, 흔히 우리가 알고 있는 엑셀의 시트 형태와 같다.

이런 데이터베이스를 통합하고 관리하는 소프트웨어를 ‘데이터베이스 관리시스템(DataBase Management System, DBMS)’라고 하며, 보통 RDB를 관리하는 시스템을 ‘관계형 데이터베이스 관리시스템(Relational DBMS, RDBMS)’이라고 한다. 이런 관계형 데이터베이스는 ‘SQL(Structured Query Language)’이라는 언어를 통해서 데이터 전송을 주고 받는다.

정리하면 다음과 같다.

  • 데이터 뭉치: 관계형 데이터베이스
  • 데이터를 담는 통: 관계형 데이터베이스 관리시스템
  • 통에서 특정 데이터 조작: SQL

MariaDB

MariaDB는 MysSQL와 동일한 소스코드를 기반으로 한 오픈소스 관계형 데이터베이스 관리시스템(RDBMS)이다. 소스코드가 같으므로 데이터베이스의 구조나 사용방법이 MysSQL과 동일하다.

Docker에 MariaDB 컨테이너 생성하기

먼저 MariaDB image를 다운받아야 한다. 아래의 코드를 입력하여 다운을 받은 뒤, 도커 이미지를 확인해보자.

1
2
docker pull mariadb # mariaDB image download
docker images # check downloaded images

그 다음 아래의 코드를 입력하여 MariaDB 컨테이너를 생성하면 된다.

1
docker run --name '컨테이너 이름' -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD='접속 비밀번호' mariadb

‘접속 비밀번호’는 이후 해당 컨테이너에 접속할 때 사용할 예정이기에 메모하는 것을 추천한다. 위 코드에서 -d는 백그라운드 모드(detached mode)로 생성함으로 의미하며, 포트는 MySQL 포트번호인 ‘3306’로 설정한다.

NOTE
백그라운드 모드(detached mode)란?
사용자가 해당 컨테이너를 사용하지 않는 경우에도 컨테이너 서버가 작동하고 있는 것을 말한다. 보통 서빙 서버와 같이 지속적으로 데이터를 주고받아야 하는 서버들은 백그라운드 모드로 실행한다.

컨테이너 생성이 완료되었다면 아래의 코드를 입력하여 확인해보자.

1
docker ps

MariaDB 접속하기

이제 만든 컨테이너에 접속해보자. 아래의 코드를 입력한다.

1
docker exec -i -t mariadb /bin/bash

도커에서 exec는 컨테이너 내부로 접속하는 명령어이다. 그다음 명령어 exec의 옵션인 -i는 ‘interactive’의 약자로 사용자가 해당 서버에 입출력할 수 있도록 해주며, -t는 가상 터미널인 TTY(pseudo-TTY)를 통해 bash셀을 사용할 수 있도록 해준다.

접속이 완료되면 아래와 같이 컨테이너 ID가 프롬프트가 된다.

1
root@'컨테이너 ID':/#

그다음 아래의 코드를 입력하여 MariaDB에 접속한다.

1
mysql -u root -p

비밀번호는 처음 컨테이너를 생성할 때 만들었던 것을 입력하면 된다. 그러면 아래와 같이 프롬프트창이 변할 것이다.

1
MariaDB [(none)]>

my.snf 수정하기

MariaDB에서 status를 입력하면, DB 정보를 확인할 수 있다. 그중 characterset이 “latin” 경우에는 힌글이 깨질 수 있기 때문에 UTF-8로 변경해주어야 한다.

1
2
3
4
5
6
7
MariaDB [(none)]> status
.
.
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: latin1
Conn. characterset: latin1

변경하는 방법은 간단하다. 해당 터미널에서 exit를 입력하여 DB를 빠져나온 후 컨테이너에서 아래의 코드를 입력하여 수정할 파일을 오픈한다. 우리는 에디터 vim을 사용하여 터미널 내에서 수정을 진행할 것이다.

1
2
root@'컨테이너 ID':/# apt-get update
root@'컨테이너 ID':/# apt-get install vim

컨테이너 내에 vim 설치가 완료되었다면 아래의 디렉토리로 이동하여 해당 파일을 오픈한다.

1
2
root@'컨테이너 ID':/# cd /etc/mysql
root@'컨테이너 ID':/# vim my.cnf

그러면 에디터가 열리고 파일 내용이 터미널에 나타난다. 여기서 i를 입력하여 INSERT 모드로 변경한 후 아래의 코드를 복사해 붙여넣자.

1
2
3
4
5
6
7
8
9
10
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

그다음 esc를 누르고 :write를 입력하고 엔터를 누르면 수정사항이 저장된다. 그 후 :q을 입력하여 에디터를 빠져나오면 된다.

확인을 위하여 다시 DB에 접속해보자. 접속한 후, status를 다시 입력해보면 변경된 것을 확인할 수 있다.

1
2
3
4
5
6
7
MariaDB [(none)]> status
.
.
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4