전공영역 공부 기록

mariadb 도커 컨테이너 실행

악분 2021. 8. 9. 22:53
반응형

안녕하세요.

 

이 글은 mariadb 도커 컨테이너를 실행하는 방법을 다룹니다.

글을 보시고 진행이 잘 안되시면 영상을 참고해주시면 좋을 것 같습니다.

https://youtu.be/AHLbqZ4G5n4?t=11 

 

 

 


 

1. 준비

도커가 설치된 환경이 준비되어 있어야 하고 도커 사용방법을 알고 계셔야 합니다.

이 글은 도커 설치 방법과 도커 명령어를 설명하지 않습니다.

 

 

2. 버전 검색

mariadb 공식 컨테이너 이미지는 docker-hub에서 찾을 수 있습니다.

docker-hub mariadb 링크: https://hub.docker.com/_/mariadb

 

mariadb버전 검색은 Tag메뉴에서 검색하실 수 있습니다.

그림1 mariadb 컨테이너 이미지 검색

 

 

이 글에서는 10.3.30버전을 사용합니다.

그림2 mariadb 컨테이너 이미지 검색 결과

 

 

3. mariadb 옵션 설정

mariadb 컨테이너 옵션은 환경변수로 설정할 수 있습니다. 사용자가 설정할 수 있는 옵션은 docker-hub 문서를 참고하시면 됩니다. 

docker-hub mariadb 링크: https://hub.docker.com/_/mariadb

그림3 mariadb 설정 옵션

 

자주 사용하는 옵션을 [그림 4]에 정리해봤습니다. 이 옵션을 사용해서 Mariadb 컨테이너를 생성할겁니다!

환경변수 의미
MARIADB_DATABASE 컨테이너가 실행되면 자동으로 생성할 데이터베이스 이름
MARIADB_USER 일반계정
MARIADB_PASSWORD 일반계정 비밀번호
MARIADB_ROOT_PASSWORD root계정 비밀번호

그림4 mariadb 설정 예

 

 

4. docker volume생성

컨테이너에서 저장된 데이터는 컨테이너가 종료되면 없어지는 휘발성 데이터입니다. 즉, mariadb 컨테이너에 저장된 데이터는 컨테이너가 예기치 못한 상황에 꺼지면 날아간다는 의미입니다. 영원히 저장하기 위해서는 도커 볼륨을 사용해야 합니다.

docker volume create mariadb-data

 

 

5. Mariadb 컨테이너 실행

[그림 4]에서 언급한 옵션을 몇가지 제거하고 추가할 겁니다. 사용자 계정/비밀번호, 데이터베이스를 생성하지 않은 이유는 기본 설정으로 원격 접근권한이 막혀있으므로 DB콘솔에서 별도로 생성할 것입니다. 이 과정은 [챕터 6]에서 설명합니다.

  • 포트포워딩: -p옵션을 사용해서 특정 호스트 포트를 컨테이너 포트로 포워딩합니다.
  • 볼륨 바운트: 생성했던 볼륨을 /var/lib/mysql로 마운트합니다.
docker run -d  \
-p 3306:3306  \
--name mariadb \
-e MARIADB_ROOT_PASSWORD=password \
-e TZ=Asia/Seoul \
-v mariadb-data:/var/lib/mysql \
mariadb:10.3.30 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 

6. mariadb 원격계정 설정

mariadb기본 설정은 원격접속을 막았습니다. 그러므로 컨테이너 쉘에 연결해서 원격접속 설정이 필요합니다.

보안상 원격접근을 활성화하는 것은 권장하지 않습니다.

 

mariadb 컨테이너에 접속하기 위해 docker exec명령어를 실행합니다.

docker exec -it -u 0  mariadb  /bin/bash

 

그리고 mysql client로 root계정으로 로컬접속을 시도합니다. 비밀번호는 [그림 4]에서 설정한 MARIADB_ROOT_PASSWORD입니다.

mysql -u root -p

그림5 Mariadb 로컬 root계정 접속

 

 

데이터베이스를 생성하고 원격으로 접속할 수 있는 계정 생성, 권한 설정을 합니다. 아래 예제는 dev데이터베이스, developer계정을 생성합니다. 그리고 developer계정에게 dev데이터베이스 모든 권한을 설정합니다.

create databases dev

use mysql;
create user 'developer'@'%' identified by 'password';
GRANT ALL ON dev.* TO 'developer'@'%';
FLUSH PRIVILEGES;

exit;

 

 

7. mariadb 원격접속

[6]번과정이 잘 설정이 되었다면 데이터베이스 원격접속이 가능합니다. 원격접속 테스트는 리눅스 mysql-client를 사용합니다. 아래 명령어는 developer계정으로 dev데이터베이스에 접속하는 예입니다.

dev데이터베이스에서만 권한이 설정되어 있으므로 다른 데이터베이스에 접근하는 경우 denied됩니다.
mysql -h <your-ip> -P 3306 -u developer -p dev
반응형