mariaDB Docker Container 환경설정
Ubuntu에서 mariaDB를 설치하고 초기 설정을 해봅니다.
이전 블로그에서 적었던 적이 있는 내용이다. 그 글은 On-Premise 환경에서의 환경설정을 다루었는데, Docker Container로 넘어오면서는 달라져서 Docker 환경에서의 설정 방법을 간단하게 기재해보고자 한다.
혹시, Ubuntu 환경에서 Docker 설치 방법을 찾고 계시다면, 여기 글을 참고하면 된다.
생각해야할 점
우리나라에서 Database를 구축할 때 생각해야 할 내용이 2가지 있다.
- 기본 charset을 utf8 또는 utf8mb4 등으로 설정하여 한글이 저장될 수 있도록 해야한다.
- Timezone을 GMT+9로 설정하여 now() 등의 쿼리를 사용하였을 때 문제가 없도록 해야한다. 단, 국제 서비스를 생각하고 있다면 UTC로 설정하고 보정하는 것 같기도 하다.
그 외에도 여러 상황에 따라서 연결 가능한 IP를 제한한다던지 등의 설정을 구성해야 한다. 이번 글에서는 간단하게 위의 2가지 설정을 반영하는 설정 예제를 공유하고자 한다.
Docker Compose 구성하기
제일 간단하게 배포하고자 하면, Docker 명령어로 배포하는 방법이 있다. 하지만, 명령어가 너무 길어지고, 각각의 옵션이 뭘 뜻하는지도 이해가 되지 않을 때가 있어서, docker compose 사용을 추천하는 바이다. 이를 이용하면 깔끔하게 컨테이너의 환경을 설정하고, 다른 환경에 옮길 때도 설정을 동일하게 하는데 도움이 된다.
# docker-compose.yaml
# 최근 docker compose에서는 version을 기재하지 아니한다.
services:
mariadb:
container_name: mariadb
image: mariadb:(버전 기재)
restart: always
# 환경에 따라 변경
expose:
- "3306"
volumes:
# DB 데이터 저장 디렉터리
- ./data:/var/lib/mysql
# 설정 파일 저장될 위치
- ./config:/etc/mysql/conf.d
environment:
# 정의하지 않으면 실행 시 에러 발생
- "MYSQL_ROOT_PASSWORD=(root 계정의 PASSWORD 정의)"
# 시스템 타임존 설정
- "TZ=Asia/Seoul"
command:
# 위 명령어를 사용하지 않으면, 일부 설정이 latin으로 설정됨.
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
설정 길라잡이
Image의 버전 정하기
mariaDB의 버전은 여러가지인데, 각자에 맞는 버전으로 설정합니다. Tag는 Docker Hub에서 확인하실 수 있습니다. 저는 이전 서버에서 이전하는 것이기 때문에 버전을 이전 서버와 동일하게 맞췄습니다.
포트 노출 설정하기
예제의 경우, 외부에서의 연결이 필요 없고, 컨테이너들 사이에서만 통신을 하는 환경이기 때문에 컨테이너 내부 네트워크에만 노출시키는 expose라는 명령을 사용하였다. 만일, 컨테이너 외부에서 연결이 필요하다면, ports로 바인딩할 포트를 정의하면 된다.
볼륨 설정하기
volumes에는 2가지를 적어두었습니다. 첫번째는 data 라는 디렉터리인데, 이는 mariaDB의 데이터가 저장되는 디렉터리와 연결하여, 컨테이너를 재시작하더라도 데이터가 초기화되지 않도록 설정합니다.
두번째로 config 라는 디렉터리는 charset을 UTF8MB4로 설정하기 위한 conf.d 파일들을 연결시켜주기 위해 설정하였습니다.
환경 변수 설정하기
environment에는 환경변수가 들어가 있다.
MYSQL_ROOT_PASSWORD 의 경우 root 계정의 비밀번호를 정의해준다. 이 옵션을 정의하지 않고 시작할 경우 에러가 발생하므로 주의해야한다.
두번째로 TZ 라는 환경변수가 있는데, 이는 컨테이너 시스템의 타임 존을 명시하여 추후에 생길 문제를 방지한다.
Charset 수정을 위한 Config 구성
이전에 직접 설치했을 때에는 utf8mb4가 기본이었던 걸로 기억하는데, mariaDB 컨테이너의 기본 charset은 latin1 이다. 그래서, Config를 수정하여 실행하여야 utf8mb4로 설정이 된다. mariaDB 컨테이너를 실행하면 있는 기본 Config 파일을 기반으로 수정한 파일들이다.
# docker.cnf
[mysqld]
skip-host-cache
skip-name-resolve
# mariadb.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
[mysqldump]
default-character-set=utf8mb4
# mysqld_safe_syslog.cnf
[mysqld_safe]
skip_log_error
syslog
위 3개의 파일을 작성하여, config 디렉터리에 넣으시면 된다.
위와 같이 구성하고, docker compose up -d
하시면, 실행되는 모습을 확인할 수 있다.
추가 커스터마이징 할 수 있는 부분
Volume를 Docker Volume으로 변경
Volume를 Docker에서 제공하는 Volume으로 변경하여 구성할 수 있다. docker compose 구성 파일 최하단에 아래 내용을 추가하고, Volume 부분의 Host 디렉터리 부분을 생성한 Volume으로 변경한다.
volumes:
(Docker Volume 이름):
docker copmose down 명령을 수행할 때, 생성한 볼륨도 삭제하기 위해서는 -v
옵션을 추가하면 된다.
Network를 변경하여, 컨테이너끼리 연결
위와 같이 docker compose 구성 파일에 서비스가 하나만 있다면, 네트워크가 달라 다른 서비스와 통신을 할 수 없다. 이럴 때는 docker compose 구성 파일에 다른 서비스를 추가하여 통신하는 방법도 있지만, Docker에서 미리 network를 생성하고 해당 network에 DB와 통신할 컨테이너를 같은 네트워크 붙혀준다.
네트워크는 아래 명령어로 생성할 수 있다.docker network create (네트워크 이름)
이후, docker compose 구성 파일에서 아래 내용을 추가한다.
networks:
(네트워크 이름):
external: true
그 다음, mariadb 서비스 구성에서 아래 내용을 추가한다.
networks:
- (네트워크 이름)
위 구성의 경우 연결할 컨테이너 구성에 같이 추가해줘야한다.