이전 포스팅에서 다뤘던 [리눅스에서 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
📝 설명
FROM mariadb:10.7.4
: 베이스 이미지를 설정. 여기서는 MariaDB의 특정 버전을 사용합니다.COPY my.cnf /etc/mysql/my.cnf
: MariaDB 설정 파일(my.cnf
)을 컨테이너 내부로 복사합니다.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
📝 설명
[mysqld]
: MariaDB의 데몬 설정을 정의합니다.datadir
: 데이터 파일이 저장될 경로.- 로그 파일 설정: MariaDB가 기록하는 로그 파일 위치를 지정합니다.
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
📝 주요 옵션 설명
-e
: 환경 변수 설정.MARIADB_USER
: MariaDB 사용자 이름.MARIADB_PASSWORD
: 사용자의 비밀번호.MARIADB_ROOT_PASSWORD
: 관리자 계정(root)의 비밀번호.TZ=Asia/Seoul
: 타임존 설정.
--rm
: 컨테이너 종료 시 컨테이너를 삭제.-d
: 백그라운드 실행.-p 3306:3306
: 로컬 포트(3306)와 컨테이너 포트(3306)를 연결.-v
: 볼륨 마운트로 데이터 지속성을 확보./var/lib/mysql
: 데이터 파일이 저장될 위치./etc/mysql/
: MariaDB 설정 파일 위치./var/log/mysql
: MariaDB 로그 파일 위치.
5. 데이터 파일과 설정 파일의 권한 확인
MariaDB 컨테이너가 데이터를 올바르게 관리하기 위해서는 데이터 디렉토리 및 설정 파일 디렉토리의 권한이 정확히 설정되어 있어야 합니다.
✅ 권한 확인 및 수정 명령어
sudo chown -R 1001:1001 /appdata/mariadb/data
📝 설명
chown -R 1001:1001
:/appdata/mariadb/data
디렉토리의 소유자와 그룹을 컨테이너의 기본 MariaDB UID/GID(1001
)로 변경.- 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;
📝 설명
docker exec -it mariadb bash
: 실행 중인 컨테이너에 접속.mysql -uroot -p
: root 사용자로 MariaDB에 로그인.CREATE DATABASE
: 새로운 데이터베이스 생성.CREATE USER
: MariaDB 사용자 계정 생성.GRANT ALL PRIVILEGES
: 사용자가 특정 데이터베이스에 대해 모든 권한을 가질 수 있도록 설정.FLUSH PRIVILEGES
: 권한 변경 사항을 즉시 적용.
📌 정리
- Docker로 MariaDB 이미지(
10.7.4
)를 다운로드. - MariaDB 설정 파일(
my.cnf
)을 작성하고 Dockerfile에 반영. - 데이터 디렉토리 및 설정 파일 권한 확인 (
chown
명령어 사용). - 보안을 강화하여 원격 접근을 제한하고 최소 권한을 부여.
- Docker 컨테이너 실행 및 내부에서 데이터베이스와 계정을 생성.
'Docker' 카테고리의 다른 글
[Docker] SSH 연결 문제와 Docker 설정: 원인부터 해결까지 (0) | 2024.11.20 |
---|---|
[Docker] 리눅스에서 Docker 설치 및 실행 방법 (0) | 2024.11.19 |
[Docker] Dockerfile 작성법 (0) | 2024.11.18 |
[Docker] Docker란 무엇인가? (5) | 2024.11.10 |
[Docker] 네트워크 변경(네트워크 중복으로 인한 접속 불가능), HTTP 허용, Root 경로 수정 daemon.json 설정 (0) | 2023.12.04 |