Docker

[Docker]Docker를 이용해 MariaDB 설치하기

TaeHuiLee 2024. 11. 22. 10:23
반응형

이전 포스팅에서 다뤘던 [리눅스에서 Docker 설치 및 실행 방법] 내용을 참고하시면, 이번 주제에 대한 배경 지식이나 기초 정보를 확인하실 수 있습니다!


🐳 이 포스팅에서는 Docker를 이용해 MariaDB를 설치하고 사용하는 방법을 단계별로 설명하겠습니다. 최신 버전 MariaDB 사용 시 발생할 수 있는 오류를 방지하기 위해 10.7.4 버전을 사용하는 방법을 중점적으로 다룹니다.


1. 원하는 MariaDB Image를 다운로드

Docker는 이미지 기반의 가상화 기술로, MariaDB 이미지를 사용해 빠르게 데이터베이스 환경을 구축할 수 있습니다.

✅ 명령어

docker pull mariadb:10.7.4

📝 설명

  • docker pull: Docker Hub에서 MariaDB 이미지를 다운로드.
  • mariadb:10.7.4: MariaDB의 10.7.4 버전을 명시적으로 지정합니다. 최신 버전이 불안정할 수 있으므로 권장됩니다.

2. Dockerfile 작성

Dockerfile은 MariaDB 컨테이너 이미지를 사용자 정의하는 데 사용됩니다.

✅ Dockerfile 내용

FROM mariadb:10.7.4

# 설정 파일 복사
#COPY my.cnf /etc/mysql/my.cnf
COPY my.cnf /etc/mysql/mariadb.conf.d/my.cnf

# 포트 노출
EXPOSE 3306

📝 설명

  1. FROM mariadb:10.7.4: 베이스 이미지를 설정. 여기서는 MariaDB의 특정 버전을 사용합니다.
  2. COPY my.cnf /etc/mysql/my.cnf: MariaDB 설정 파일(my.cnf)을 컨테이너 내부로 복사합니다.
  3. EXPOSE 3306: 컨테이너의 3306 포트를 노출. MariaDB의 기본 포트입니다.

3. 설정 파일 작성

MariaDB의 동작 방식을 설정하는 my.cnf 파일 작성 방법입니다.

✅ 예시 파일

[mysqld]
# MariaDB 설정 예제
user=mysql
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock

# 로그 파일 위치
log-error=/var/log/mysql/error.log
general_log_file=/var/log/mysql/mysql.log
slow_query_log_file=/var/log/mysql/mysql-slow.log

# 기타 설정
symbolic-links=0

📝 설명

  1. [mysqld]: MariaDB의 데몬 설정을 정의합니다.
  2. datadir: 데이터 파일이 저장될 경로.
  3. 로그 파일 설정: MariaDB가 기록하는 로그 파일 위치를 지정합니다.
  4. symbolic-links: 보안 문제 방지를 위해 심볼릭 링크를 비활성화.

⚠️ 주의: 설정 파일이 심볼릭 링크로 걸려있을 가능성이 있으니 확인 필요.


4. Docker 컨테이너 실행

MariaDB를 실행하는 Docker 명령어를 알아봅니다.

✅ 명령어

docker run --rm -d -p 3306:3306 --name mariadb \
-e MARIADB_USER=[user] \
-e MARIADB_PASSWORD=[password] \
-e MARIADB_ROOT_PASSWORD=[rootPassword] \
-e TZ=Asia/Seoul \
-v /appdata/mariadb/data:/var/lib/mysql \ 
-v /appdata/mariadb/config:/etc/mysql/mariadb.conf.d \
-v /appdata/mariadb/logs:/var/log/mysql \

mariadb:10.7.4

📝 주요 옵션 설명

  1. -e: 환경 변수 설정.
    • MARIADB_USER: MariaDB 사용자 이름.
    • MARIADB_PASSWORD: 사용자의 비밀번호.
    • MARIADB_ROOT_PASSWORD: 관리자 계정(root)의 비밀번호.
    • TZ=Asia/Seoul: 타임존 설정.
  2. --rm: 컨테이너 종료 시 컨테이너를 삭제.
  3. -d: 백그라운드 실행.
  4. -p 3306:3306: 로컬 포트(3306)와 컨테이너 포트(3306)를 연결.
  5. -v: 볼륨 마운트로 데이터 지속성을 확보.
    • /var/lib/mysql: 데이터 파일이 저장될 위치.
    • /etc/mysql/: MariaDB 설정 파일 위치.
    • /var/log/mysql: MariaDB 로그 파일 위치.

5. 데이터 파일과 설정 파일의 권한 확인

MariaDB 컨테이너가 데이터를 올바르게 관리하기 위해서는 데이터 디렉토리설정 파일 디렉토리의 권한이 정확히 설정되어 있어야 합니다.

✅ 권한 확인 및 수정 명령어

sudo chown -R 1001:1001 /appdata/mariadb/data  

📝 설명

  1. chown -R 1001:1001: /appdata/mariadb/data 디렉토리의 소유자와 그룹을 컨테이너의 기본 MariaDB UID/GID(1001)로 변경.
  2. MariaDB 사용자 권한: 기본적으로 MariaDB 컨테이너는 UID/GID 1001로 실행되므로, 해당 사용자가 데이터를 읽고 쓸 수 있어야 합니다.

⚠️ 주의: 잘못된 권한 설정은 MariaDB 컨테이너 실행 오류를 유발할 수 있습니다.


6. 기본 보안 설정 강화

MariaDB의 보안을 강화하려면 다음 설정을 추가로 고려해야합니다.

✅ 보안 강화 설정

1. 루트 계정 원격 접근 금지

MariaDB의 root 계정은 강력한 권한을 가지고 있어 보안에 취약할 수 있습니다. 원격 접근을 제한하고 별도의 관리 계정을 생성해야합니다.

CREATE USER 'admin'@'%' IDENTIFIED BY 'secure\_password';  
GRANT ALL PRIVILEGES ON _._ TO 'admin'@'%' WITH GRANT OPTION;  
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'%';  

2. 권한 최소화

특정 사용자가 필요한 데이터베이스에만 최소 권한을 가지도록 설정합니다.

GRANT SELECT, INSERT, UPDATE ON my\_database.\* TO 'my\_user'@'%';  

3. my.cnf 보안 설정 추가

\[mysqld\]  
bind-address = 127.0.0.1 # 로컬 연결로 제한  
skip-symbolic-links # 심볼릭 링크 비활성화  

📝 설명

  • bind-address: MariaDB의 원격 접근을 제한하거나 특정 IP만 허용.
  • skip-symbolic-links: 보안 문제를 방지하기 위해 심볼릭 링크 비활성화.

7. 컨테이너 내부에서 데이터베이스 생성 및 계정 추가

MariaDB 컨테이너에 접속해 데이터베이스를 생성하고 계정을 설정합니다.

✅ 컨테이너 접속

docker exec -it mariadb bash
mysql -uroot -p
[rootPassword]

✅ 데이터베이스 생성

CREATE DATABASE my_database;

✅ 사용자 계정 생성 및 권한 부여

CREATE USER 'my_user'@'%' IDENTIFIED BY 'my_password';
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'%';
FLUSH PRIVILEGES;

📝 설명

  1. docker exec -it mariadb bash: 실행 중인 컨테이너에 접속.
  2. mysql -uroot -p: root 사용자로 MariaDB에 로그인.
  3. CREATE DATABASE: 새로운 데이터베이스 생성.
  4. CREATE USER: MariaDB 사용자 계정 생성.
  5. GRANT ALL PRIVILEGES: 사용자가 특정 데이터베이스에 대해 모든 권한을 가질 수 있도록 설정.
  6. FLUSH PRIVILEGES: 권한 변경 사항을 즉시 적용.

📌 정리

  1. Docker로 MariaDB 이미지(10.7.4)를 다운로드.
  2. MariaDB 설정 파일(my.cnf)을 작성하고 Dockerfile에 반영.
  3. 데이터 디렉토리 및 설정 파일 권한 확인 (chown 명령어 사용).
  4. 보안을 강화하여 원격 접근을 제한하고 최소 권한을 부여.
  5. Docker 컨테이너 실행 및 내부에서 데이터베이스와 계정을 생성.
반응형