[Linux] Mariadb Docker container 설치
A. 사용환경
- OS : Rocky Linux 9.5 (Blue Onyx)
- Docker : 28.0.4
- Portainer : 2.27.3 LTS
B. 시작하기 전에...
어떤 소프트웨어를 사용하더라도 보통 Database는 거의 필수로 필요한 편이다.(요즘엔 SQLite도 많이써서... DB서버가 없어도 되긴하지만 어쨌든!) 업무적으로 사용할 소프트웨어들을 몇개 검토해봤는데, 대부분이 MySQL, Mariadb, PostgreSQL이더라.
일단, 바로 설치해서 사용해볼 소프트웨어가 BookStack이라서 Mariadb를 설치하기로 결정했다.(MySQL도 지원하긴한다. 그냥 Mariadb가 더 오픈소스 같긴해서...ㅋㅋ)
C. 설치할 이미지 및 태그확인
앞서 Portainer 설치할 때처럼 설치할 버전은 도커허브 공식홈페이지에서 확인하는 것을 선호한다.
설치할 소프트웨어인... mariadb
를 검색해보면?

위와 같이 Docker에서 제공하는 Official Image로 제공되는 mariadb 이미지를 확인할 수 있다.
Tags
탭을 선택하면...

위와 같이 설치가 가능한 버전을 확인할 수 있다. 기본적으로는 최근에 업데이트가 된 버전이 윗부분에 있어서 윗쪽에서 고르면 되긴하는데...
Database의 경우에는 버전 업그레이드를 너무 빠르게 하면, 해당 Database를 사용하는 소프트웨어 영향을 많이 주니... 버전 업그레이드를 보수적으로 수행하는 것을 선호한다.(소프트웨어의 유형이나 산업군에 따라서는 아예 Database를 구축한 뒤에 아예 손대지 않는 것이 불문율인 경우도 있다..)
그래서 선택한 버전은...

보통 Ubuntu에서 LTS라고 하면 Long Term Support(장기지원버전)를 의미하니 안정적인 버전으로 어느정도 인정되었고, 장기적으로 사용하기에 적정할 것으로 판단했다.
그래도 lts 태그를 이용해서 설치할 경우에 명확하게 어떤 버전을 사용 중인지 바로 확인이 안되니까... 같은 Digest를 가진 버전을 찾아본다.

2025/04/17일자 기준으로 현재 lts 태그를 가진 버전과 동일한 버전은 11.4.5이다.
해당 이미지를 받아서 설치해보자.
$ sudo docker pull mariadb:11.4.5
11.4.5: Pulling from library/mariadb
2726e237d1a3: Pull complete
1d35cdfc144e: Pull complete
1a651cb0c71e: Pull complete
98bfe53b55bd: Pull complete
4be00493f4da: Pull complete
fd25a27912e9: Pull complete
89858d4e40b6: Pull complete
ef213dc92d34: Pull complete
Digest: sha256:663d4d3e652220e3c618564dd401ae33ee5ea2b31aafd13c6d4e8ed29b8df733
Status: Downloaded newer image for mariadb:11.4.5
docker.io/library/mariadb:11.4.5
$
아래의 명령어로 다운받은 이미지를 확인할 수 있다.
$ sudo docker image ls | grep mariadb
mariadb 11.4.5 3b9caf5af534 2 months ago 327MB
$
D. Mariadb 컨테이너 배포
01. Mariadb용 볼륨생성
Mariadb의 데이터를 적재할 볼륨을 생성한다.
$ sudo docker volume create mariadb_data
mariadb_data
$ sudo docker volume ls | grep mariadb
local mariadb_data
$
02. 컨테이너 배포
배포는 이전에 설치해둔 Portainer를 이용해서 진행해보자

- Name : mariadb (컨테이너 이름)
- Image : mariadb:11.4.5 (설치할 이미지 & 태그)
- Portainer에서 mariadb를 입력하고 Search를 눌러도 되긴하는데... 어차피 도커허브 홈페이지로 이동한다.
- 그래서 어느 순간부터 그냥 미리 도커허브에 접속해서 설치할 이미지 확인하고 pull까지 CLI로 진행한 뒤에 Portainer를 이용해서 배포를 하는 방식으로 사용하고 있다.
- Always pull the image : Disable
- 설명을 읽어보면 배포할 때 항상 태그에 해당하는 최신버전의 이미지를 pull(=다운로드)한다고 한다.
- 어차피 특정 버전의 tag를 지정해뒀지만... 의도하지 않은 동작이 발생할 수 있으므로 꺼두자.(무조건 최신버전을 선호한다면 latest로 두고 켜두면 될 듯..)

하단의 Advanced container settings를 보면 추가적인 설정이 가능한데.. 일단 컨테이너가 지워져도 데이터는 사라지지 않도록 위에서 생성한 컨테이너용 볼륨을 지정해준다.
- container : /var/lib/mysql
- Mariadb가 MySQL 오라클 인수에 따라서 Fork된 프로젝트임을 알 수 디렉토리명으로 알 수 있다.(ㅎㅎ)
- volume : mariadb_data
- 위에서 생성한 호스트쪽 볼륨명을 입력한다.

네트워크 설정도 해보자.
- Network : DevteamNet 선택
- 나의 경우에는 해당 브릿지 네트워크 내부에서만 통신할 계획이라서 따로 만들어둔 네트워크를 선택했다.
- 그리고 DB서버의 IP주소가 바뀌면 DB를 사용하던 소프트웨어에 영향을 주므로 고정 IP 셋팅을 위해서 기본으로 제공되는 브릿지 네트워크가 아니라 따로 만들어둔 것..
- 처음에 DB서버의 포트를 expose하지 않은 것도 어차피 DB서버는 해당 네트워크 내부에서만 통신이 되면 되니까 아예 DB접속 포트를 노출하지 않은 것...
- 구성하는 방식에 따라서 다르니 참고만 하시길...
- hostname : mariadb (지정하지 않아도 문제는 없지만 그냥...)
- IPv4 Address : 172.20.0.100 (기억하기 쉽도록 그냥 마지막 번호를 100으로 지정했다.)

환경변수는... 구축할 방법마다 다르긴한데, 일단 Mariadb root 패스워드만 지정해서 설치를 진행해보자.
환경변수의 경우에는 도커이미지 Overview페이지를 확인해서 필요한 것을 입력해줘야 한다.
그리고 보통 저런 이미지들이 시간대가 한국시간대가 아닌 경우가 많아서... 캡쳐에는 빠졌지만 아래와 같이 입력했다.
- MARIADB_ROOT_PASSWORD : 비밀번호
- TZ : Asia/Seoul

Restart Policy는 Always
를 선택한다.
거의 대부분 입력이 된 것 같으니... 이제 배포를 해보자!

Advanced container settings 윗 부분에 Deploy the container
버튼이 있다. 그걸 클릭하면 지금까지 입력된 내용을 기분으로 docker run
명령어를 실행한다.
그리고 Container list로 이동한다.

해당 컨테이너를 선택한 뒤에 중간쯤에 Logs
를 클릭하면?

아래와 같이 실행 중인 컨테이너의 로그를 확인할 수 있다.

보통 컨테이너 실행에 필요한 필수 환경변수들을 설정하지 않았거나 하는 등의 이슈가 발생하면 해당 컨테이너는 실행되다가 종료되고 재실행 되는 등의 오동작을 한다. 그럼 도커허브의 해당 컨테이너의 정보를 다시 확인해봐야한다.
E. 배포 후 점검
mariadb가 잘 배포되었는지 점검해보자. mariadb 컨테이너를 선택한 뒤에 Logs
옆에 Console
이라는 링크가 있다.


그리고 이동한 페이지에서 Connect
를 클릭하면...?

마치 리눅스 서버에 접속한 것과 같은 상태가 된다. 그럼 리눅스 서버를 점검하듯이 아래의 내용을 확인해보자.
- hostname 확인
- ip 확인
- Timezone 확인
- Mariadb 서비스 확인
root@mariadb:/# hostname
mariadb
root@mariadb:/# ip addr | grep inet
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
inet 172.20.0.100/24 brd 172.20.0.255 scope global eth0
root@mariadb:/# date
Thu Apr 17 16:35:01 KST 2025
root@mariadb:/#
1,2,3은 컨테이너 배포 시에 설정한 내용이 정상적으로 적용됨을 확인할 수 있다. TZ
환경 변수에 Asia/Seoul로 지정했으므로 date 명령어 결과가 KST(Korea Standard Time)가 조회되면 정상적으로 한국시간대로 지정된 것이다.
root@mariadb:/# ps -ef | grep mariadb
mysql 1 0 0 16:15 ? 00:00:00 mariadbd
root 187 160 0 16:37 pts/2 00:00:00 grep --color=auto mariadb
root@mariadb:/#
root@mariadb:/# mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.4.5-MariaDB-ubu2404 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.000 sec)
MariaDB [(none)]>
ps 명령어로 mariadb 프로세스가 살아있는지 확인해보고, 컨테이너 배포 시에 입력했던 비밀번호로 mariadb 접속이 되는지 확인해본다.
정상적으로 데이터베이스들이 조회되면 Mariadb는 정상적으로 배포된 것이고... 이제 애플리케이션에서 필요한 데이터베이스와 db계정과 같은 것은 위와 같은 콘솔에서 작업하면 된다.
F. 마치면서
작성을 얼추마치고선 대충 리뷰를 해보니... CLI를 이용해서 도커이미지 pull하는 것과 Portainer를 이용해서 배포하는 것.. 마구 혼용해서 작성하다보니 읽는 사람의 입장에서는 더 헷갈릴 수도 있겠다는 생각이 들긴한다.
그래서 배포하는 부분을 아예 CLI로 바꾸려다가... 실제로 내가 사용하는 방식이라서 그냥 냅두기로 했다.
만약에 이 글을 읽고서 더 헷갈린다고 생각이 드는 사람이라면... CLI로 사용하는 것을 더 공부해보기를 권장한다. 그리고 명령어가 어느정도 익숙해진 뒤에 Portainer를 사용하면 편리함을 느낄 수 있을 것이다.
CLI 환경과 GUI 환경의 장단점이 분명이 있지만, Portainer 환경은 결국 CLI로 가능한 것을 편리하게 해주는 것이 가장 큰 역할이라서... CLI를 모르고 GUI만 알면 Portainer 외에 다른 환경으로 GUI 환경이 변경되면 다시 처음부터 배우는 느낌처럼 느껴질 것이다.
글을 쓰는 연습을 위해서, 그리고 내가 했던 작업을 기록하는 의미로 쓰는 블로그라.. 좀 정돈이 덜 된 것은 어쩔 수 없다...(조금 더 정돈하고 깔끔하게 쓰려고 노력하다보니 아예 글을 못쓰게되서... 일단 당분간은 연습이라고 생각하고 최대한 많이 작성해보려고 한다.)
어쩌다보니 글은 길어졌는데 전달력이 너무 떨어지는 것 같아서 약간 후회는 되지만...ㅋ 계쏙 쓰다보면 이것도 좋아지지 않을까 낙관해본다.