dinist

라즈베리파이3B+에 설치한 도커에 mariadb 설치 본문

리눅스/Docker

라즈베리파이3B+에 설치한 도커에 mariadb 설치

dinist 2021. 1. 27. 23:09

지난번에 라즈베리파이 3B+에 도커를 설치했습니다.

이번에는 도커를 통해 mariadb를 구동시켜보도록 하겠습니다.

mariadb 이미지 pull

먼저 mariadb 이미지를 받아야 합니다.

터미널에 다음과같이 mariadb 이미지를 pull 합니다.

docker pull mariadb

 

 

그러면 가장 최신버전의 mariadb 이미지를 pull합니다.

혹시 특정 버전을 pull하려면 다음과 같이 입력하면 됩니다.

docker pull mariadb:focal 	// focal 버전

docker pull mariadb:10.5.8	//10.5.8 버전

이는 docker hub의 Tag 메뉴에 명시되어있습니다.

 

링크 : hub.docker.com/_/mariadb?tab=tags&page=1&ordering=last_updated

 

mariadb Tags - Docker Hub

 

hub.docker.com

mariadb Container 만들기

pull을 완료했다면 이제 컨테이너를 실행시켜줄 차례입니다.

 

이제 다음 명령을 입력해보도록 하겠습니다.

docker container run -d -p 33066:3306 -e MYSQL_ROOT_PASSWORD=루트비밀번호 --name 컨테이너이름 mariadb





각 명령에 대한 설명은 --help명령을 입력하시면 확인하실 수 있습니다.
여기서 사용된 옵션에 대한 설명입니다.

docker container run : 새로운 컨테이너를 실행합니다.

-d : 해당 컨테이너를 백그라운드로 실행하고 해당 컨테이너의 id를 출력합니다.

-p 호스트포트:컨테이너포트  ->  컨테이너의 특정 포트를 호스트의 특정포트로 바인딩 시킵니다.
mariadb의 기본 포트는 3306인데 컨테이너에서 사용되는 mariadb의 포트번호인 3306을 현재 가동중인
호스트의 33066번으로 바인딩 하겠다는 의미입니다.

저는 호스트에 이미 mariadb가 설치되어 작동중이므로 3306포트가 사용중입니다.
그래서 3306이 아닌 33066번으로 포트를 바인딩 하였습니다.

-e : 환경변수를 지정할 수 있습니다. 여기서는 mysql의 root비밀번호를 지정하는 환경변수를 지정하였습니다.
루트 비밀번호 입력시 따옴표를 사용하지 않아도 됩니다.

--name : 컨테이너의 이름을 지정합니다. 추후 docker container ps 명령등을 통해
컨테이너의 이름을 확인할 수 있습니다. 이 옵션이 없으면 임의로 컨테이너 이름이 지정됩니다.

맨뒤의 mariadb는 mariadb 이미지를 의미합니다.

 

명령을 입력하면 아래에 컨테이너 id가 출력되며 컨테이너 생성이 완료됩니다.

 

(이 부분은 선택입니다.)

저는 매일 새벽 라즈베리파이를 재시작시킵니다. 라즈베리파이가 재시작되고나면

도커 컨테이너도 자동으로 실행되게 하기 위해 다음 옵션을 추가하였습니다.

docker update --restart=always 컨테이너이름

 

컨테이너 상태 확인

docker ps -as

s옵션을 추가하여 size를 확인할 수 있습니다.

 

기타 설정 하기

mariadb가 실행중인 컨테이너는 데비안으로 작동하고있습니다.

직접 컨테이너의 터미널에 접속하여 vim 에디터를 설치해보고 (추후 사용하게 될 수도 있음)

mariadb 콘솔에도 접속해서 외부접근을 위한 설정을 해봅시다.

 

docker exec -it 컨테이너이름 bash

-i : interactive 입니다. 실행 종료시까지 표준 입출력을 열어놓습니다.
-t : tty 입니다. pseudo-tty를 사용하기 위한 옵션입니다.

이 명령을통해 해당 컨테이너의 bash 쉘을 실행시킵니다.

명령을 실행시키면 터미널의 호스트명이 바뀌었습니다.

ec8949...으로 시작하는 이름으로 변경되었습니다.

 

컨테이너의 터미널에 잘 접속했습니다. 이제 apt update를 해주고 vim 을 설치해줍시다.

apt install -y vim

저 -y 옵션은 무조건 yes 하는 옵션입니다.

 

혹시나 dockerfile을 통해 패키지 설치 스크립트 작성 시 저 -y 옵션을 안주면 골치아픈 일이 생길지도 모릅니다.

설치 완료 후 vim을 입력해 vim을 실행시켜봅시다.

vim이 등장했습니다. 이제 설치는 다했으니 :q로 종료해줍니다.

 

이제 mariadb 콘솔에 접속해봅시다.

mariadb -u root --password=비밀번호

위 명령으로 콘솔에 접근해줍시다. 비밀번호는 아까 컨테이너 생성시 정해줬던 비밀번호를 입력해주면 됩니다.

 

mariadb 콘솔에 접속했습니다.

이제 외부접속을 위한 설정을 해봅시다.

테스트를 위한 2개의 계정을 만들겠습니다.

하나는 내부에서만 접근하기위해 접근지정을 localhost로 하고 또 하나는 모든 외부 ip를 허용하는 %로 지정하겠습니다.

 

Test 계정 추가

 

내부접속용 계정을 생성합니다.

create user 'local'@'localhost' identified by '비밀번호'

 

외부접속용 계정을 생성합니다.

crate user 'all'@'%' identified by '비밀번호'

 

지금은 접속을 위한 계정만 만들었습니다. 그리고 지금은 생성한 데이터베이스도 없으니

데이터베이스나 테이블 접근권한 설정은 하지 않겠습니다.

접속 테스트를 하는게 목적이니까요!

 

접속 테스트

이제 접속을 테스트해봅시다.

윈도우 데스크탑 환경과 라즈베리파이 터미널에서 진행합니다.

 

외부접속 테스트

MYSQL WorkBench 8.0 을 통해 접속을 시도해봅니다.

비밀번호 입력창이 나옵니다. 비밀번호를 입력해줍시다.

 

지원하는 mysql이 아니라고 경고하네요 무시하고 계속 진행을 선택합시다.

 

접속이 잘 되었습니다.

지금은 쿼리를 날려봐도 데이터베이스 접근권한이 없어 쿼리가 거부당합니다.

 

그럼 여기서 내부접속용 계정에 접근하면?

바로 거부합니다. 이 윈도우 데스크탑의 내부주소가 192.168.0.2인데 막아버리는군요

 

 

여기까지 잘 진행하면 이제 도커 컨테이너를 통해 mariadb를 실행하실 수 있습니다.