Post

MariaDB Docker 이미지 빌드 및 컨테이너 설정 자동화

소개

MariaDB는 MySQL의 오픈 소스 포크로 다양한 기능과 성능 향상을 제공합니다.
MariaDB Docker 이미지를 빌드하고 이를 기반으로 컨테이너를 설정하고 운영하는 과정을 자동화하는 방법을 소개합니다.
MariaDB 환경을 구축하고 필요한 설정을 자동으로 적용하여 안정적인 운영을 보장합니다.

목차

  1. 목표
  2. 주요 특징
  3. 기술 스택
  4. 프로젝트 구조
  5. 주요 구성 요소
  6. 기술적 과제
  7. 사용 방법
  8. 결론
  9. 향후 계획
  10. 참고 자료

목표

  • Docker 환경에서 최적화된 MariaDB 이미지 빌드 및 컨테이너 실행
  • MariaDB 설정과 초기화 과정을 자동화하여 운영 효율성 향상
  • 동일한 서버에서 여러 MariaDB 인스턴스를 독립적으로 운영할 수 있는 방법 제공

주요 특징

  • 유연한 MariaDB 설정 관리: 환경 변수에 따라 MariaDB 설정을 동적으로 조정하여 다양한 운영 환경에 맞게 최적화
  • 자동화된 초기화 및 설정 적용: MariaDB의 설치, 초기화 및 설정 과정을 자동화하여 일관된 운영 환경을 보장
  • 독립적인 다중 인스턴스 운영: 동일한 서버에서 여러 MariaDB 인스턴스를 독립적으로 운영할 수 있는 유연한 방법을 제공

기술 스택

  • Base Image: Alpine Linux
  • Database: MariaDB
  • Automation Scripts: Shell Scripts
  • Container: Docker

프로젝트 구조

소스 코드GitHub 레포지토리에서 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
mariadb/
├── bin/
│   ├── run.sh
│   ├── remove.sh
│   └── update.sh
├── config/
│   ├── my.cnf
│   └── my.cnf.full.option
├── scripts/
│   └── docker-entrypoint.sh
└── Dockerfile.10.3.23

주요 구성 요소

1. 이미지 빌드 및 컨테이너 설정

MariaDB Docker 이미지를 빌드하고 이를 기반으로 컨테이너를 실행하는 과정에서 초기화와 설정은 매우 중요한 역할을 합니다. 이 과정에서 MariaDB 설치와 설정을 자동화하여 컨테이너가 실행될 때 필요한 초기화 작업이 자동으로 수행됩니다.

  • 유저 및 그룹 ID 조정: Docker 환경의 사용자와 MariaDB 사용자 ID를 동기화하여 권한 문제를 방지
  • 자동화된 설정 파일 업데이트: 환경 변수에 따라 설정 파일을 동적으로 수정하여 각 환경에 맞는 MariaDB 설정 적용
  • 데이터베이스 초기화: 데이터 디렉터리가 존재하지 않을 경우 자동으로 MariaDB를 초기화하고 기본 데이터베이스 및 사용자 설정 수행

참고: 이 포스트에서는 MariaDB 이미지를 다루며, 기본적으로 Alpine Linux 기반으로 설정됩니다. Alpine Linux 이미지 구축 과정에 대한 자세한 내용은 이전 게시글을 참조하세요.

2. MariaDB 주요 설정

MariaDB 설정 파일은 서버의 동작을 제어하는 중요한 역할을 합니다. 아래는 주요 설정 항목, 설명, 설정값입니다.

  • client-server: 클라이언트와 서버에 공통으로 적용되는 설정

    설정 항목설명설정값
    socketMariaDB 서버와 클라이언트 간의 통신에 사용되는 소켓 파일 경로%confDir%/mariadb.sock
    portMariaDB 서버가 수신 대기할 포트 번호%port%
  • client: MariaDB 클라이언트에 적용되는 설정

    설정 항목설명설정값
    default-character-set클라이언트에서 사용할 기본 문자 세트utf8
  • mysqld: MariaDB 서버 설정입니다.

    설정 항목설명설정값
    skip-external-locking외부 잠금 기능을 비활성화하여 성능을 최적화활성화
    bind-addressMariaDB 서버가 바인딩할 IP 주소를 지정0.0.0.0
    log-errorMariaDB 서버 오류 로그가 기록될 파일 경로%logDir%/mariadb.log
    basedirMariaDB 설치 디렉터리/usr
    datadir데이터 파일이 저장될 디렉터리%dataDir%
    pid-fileMariaDB 프로세스 ID가 저장될 파일 경로%confDir%/mariadb.pid
    character-set-serverMariaDB 서버에서 사용할 기본 문자 세트utf8
    collation-serverMariaDB 서버에서 사용할 기본 정렬 규칙utf8_general_ci
    key_buffer_size인덱스 키를 캐시하기 위해 사용되는 메모리 양20M
    max_allowed_packet서버에서 허용할 최대 패킷 크기16M
    table_open_cache동시에 열 수 있는 테이블의 최대 수64
    innodb_buffer_pool_sizeInnoDB 버퍼 풀에 할당된 메모리 크기16M
    innodb_log_file_size각 InnoDB 로그 파일의 크기5M
    innodb_flush_log_at_trx_commit트랜잭션 커밋 시 로그 플러시 동작 설정1
    innodb_file_per_table각 테이블에 대해 별도의 테이블스페이스를 사용하여 관리성 및 성능을 향상활성화
  • mysqldump: 유틸리티에 적용되는 설정

    설정 항목설명설정값
    quick덤프 속도를 높이기 위해 각 행을 바로 덤프합니다.활성화
    quote-names테이블 및 칼럼 이름에 따옴표를 추가하여 덤프의 호환성을 보장합니다.활성화
    max_allowed_packet덤프 중 허용되는 최대 패킷 크기16M
  • mysql: 클라이언트에 적용되는 설정

    설정 항목설명설정값
    no-auto-rehash클라이언트 시작 시 자동으로 해시 테이블을 생성하지 않도록 설정합니다.활성화
  • myisamchk: MyISAM 테이블 검사 및 복구 유틸리티 설정

    설정 항목설명설정값
    key_buffer_sizeMyISAM 인덱스 키를 캐시하기 위한 메모리 크기20M
    sort_buffer_sizeMyISAM 테이블 정렬 작업 시 사용할 버퍼 크기20M
  • mysqlhotcopy: 유틸리티에 적용되는 설정

    설정 항목설명설정값
    interactive-timeout사용자가 오랫동안 입력하지 않으면 연결을 종료하도록 설정합니다.활성화

3. 다중 인스턴스 운영 전략

MariaDB를 다중 인스턴스로 운영할 때 자원 관리와 성능 최적화가 필요합니다. 동일한 서버에서 여러 MariaDB 인스턴스를 독립적으로 운영할 수 있도록 각 인스턴스에 대해 고유한 포트와 데이터 디렉터리를 설정하며 Docker의 리소스 제한 기능을 활용해 자원을 효율적으로 관리합니다.

  • 포트 및 데이터 디렉토리 설정: 각 인스턴스가 고유의 포트와 데이터 디렉토리를 사용하도록 설정하여 충돌 방지
  • 리소스 제한: Docker 리소스 제한 옵션을 사용해 각 인스턴스에 할당된 CPU와 메모리를 관리하여 성능 저하를 방지

기술적 과제

  1. MariaDB 설치 및 설정 자동화
    • 문제: MariaDB 설치와 설정 과정에서 수동 작업이 필요하고 이로 인해 설정 오류나 비효율적인 운영이 발생할 수 있음
    • 해결: 설정 자동화 스크립트를 통해 MariaDB 설치 및 설정을 표준화하고 수동 작업을 줄여 일관성과 운영 효율성을 높임
  2. 데이터 디렉토리 관리
    • 문제: 대규모 데이터베이스 운영 시 데이터 무결성과 성능 저하를 방지해야 함
    • 해결: MariaDB의 설정 파일을 통해 데이터 디렉토리를 관리하고 데이터베이스 운영 중 발생할 수 있는 문제를 최소화함
  3. 다중 인스턴스 운영
    • 문제: 동일한 서버에서 여러 MariaDB 인스턴스를 실행할 때 자원 충돌 및 성능 저하 가능성
    • 해결: Docker를 이용해 각 인스턴스를 격리하고 개별 포트 및 설정을 통해 자원 충돌을 방지하여 안정적인 운영을 가능하게 함

사용 방법

  1. 이미지 생성 및 태깅
    1
    2
    
    cd mariadb/bin
    ./update.sh @CUSTOM_REGISTRY_URL@
    
  2. MariaDB 실행
    1
    
    ./run.sh
    
  3. MariaDB 제거
    1
    
    ./remove.sh
    

결론

  • 효율적인 MariaDB 관리: 이미지 빌드 및 컨테이너 설정을 자동화하여 운영의 복잡성을 줄임
  • 유연한 환경 설정: 다양한 운영 환경에 맞게 MariaDB 설정을 조정하여 최적의 성능을 제공
  • 다중 인스턴스 운영 지원: 동일한 서버에서 여러 MariaDB 인스턴스를 독립적으로 운영할 수 있는 효율적인 전략 제공

향후 계획

  • 지속적인 업데이트 및 유지보수: 최신 MariaDB 버전과 Docker 기능에 맞추어 스크립트와 설정 파일을 지속적으로 업데이트
  • 확장 가능한 운영 환경 구축: 대규모 데이터베이스 운영을 위한 확장 가능한 MariaDB 운영 환경 구축
  • 보안 및 성능 개선: MariaDB의 보안 설정을 강화하고 성능 최적화를 위한 추가 설정과 스크립트를 개발

참고 자료

This post is licensed under CC BY 4.0 by the author.