DockerでMariaDB 10.5を使用できるまでの手順をお伝えします。
ここでは、docker-composeとDocker公式のMariaDB 10.5イメージを用います。

環境

ホストOS

ホストOSはUbuntu 20.04を用いております。


cat /etc/lsb-release 

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"

Docker

snapによりインストールしたDockerを用いております。
ただし、sudo権限なしでもdockerコマンドを使用できるようにしております。


docker version

Client:
 Version:           19.03.11
 API version:       1.40
 Go version:        go1.13.12
 Git commit:        dd360c7
 Built:             Mon Jun  8 20:23:26 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.11
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.12
  Git commit:       77e06fd
  Built:            Mon Jun  8 20:24:59 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

docker-compose


docker-compose version

docker-compose version 1.25.5, build unknown
docker-py version: 4.2.1
CPython version: 3.5.2
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

docker-composeでMySQL8.0を使用するための手順

今回作業するディレクトリを作成します。


mkdir mariadb10.5

作業ディレクトリに移動します。


cd mariadb10.5

mariadbのボリュームのマウント先となるディレクトリを作成しておきます。


mkdir db_data

docker-compose.ymlファイルを作成します。


version: '3'
services:
    db:
        image: mariadb:10.5
        volumes:
          - ./db_data:/var/lib/mysql
        ports:
            - "13306:3306"
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root_password
volumes:
    db_data:

次のコマンドにより、全体をバックグラウンドで起動させます。


docker-compose up -d

次のコマンドにより、コンテナを確認します。


docker-compose ps

     Name                   Command             State            Ports         
-------------------------------------------------------------------------------
mariadb105_db_1   docker-entrypoint.sh mysqld   Up      0.0.0.0:13306->3306/tcp

docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                     NAMES
3c44604908f0        mariadb:10.5        "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:13306->3306/tcp   mariadb105_db_1

db_dataディレクトリの中身を確認してみます。
/var/lib/mysqlディレクトリとマウントされていることが確認できます。


ls db_data/

aria_log.00000001  aria_log_control  ib_buffer_pool  ib_logfile0  ibdata1  ibtmp1  multi-master.info  mysql  performance_schema

MariaDB10.5コンテナに接続およびサンプルデータベースの作成

docker execコマンドによりMariaDBコンテナに接続します。
「3c44604908f0」の部分は、コンテナ作成の都度変更されるものなので、適切なコンテナIDに変更してください。


docker exec -it 3c44604908f0 bash

コンテナに接続後、mysqlコマンドによりMariaDBに接続します。
rootのパスワードは、docker-compose.ymlファイルで指定したパスワードを用います。


mysql -u root -p
Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.5-MariaDB-1:10.5.5+maria~focal 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.

次のコマンドによりデータベースを作成します。


CREATE DATABASE sample;

Query OK, 1 row affected (0.01 sec)

作成したデータベースを使うようにします。


USE sample;

Database changed

次のコマンドによりテーブルを作成します。


CREATE TABLE table_sample (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(10));

Query OK, 0 rows affected (0.008 sec)

作成したテーブルにサンプルデータを追加します。


INSERT INTO table_sample (name) VALUES ('sample_00'), ('sample_01'), ('sample_02');

Query OK, 3 rows affected (0.003 sec)
Records: 3  Duplicates: 0  Warnings: 0

SELECTにより表示させてみます。


SELECT * FROM table_sample;

+----+-----------+
| id | name      |
+----+-----------+
|  1 | sample_00 |
|  2 | sample_01 |
|  3 | sample_02 |
+----+-----------+
3 rows in set (0.000 sec)

ここまでで、確認用のデータベースを準備できましたので、次のコマンドによりMySQLから抜けます。


exit

次のコマンドによりコンテナから抜けます。


exit
Enter password:

Python3から接続してみる

sample.pyとして、次の内容を書き込みます。


import mysql.connector 

con = mysql.connector.connect(db="sample",
                              host="localhost",
                              port=13306,
                              user="root",
                              password="root_password")
cur = con.cursor()
query = "SELECT id, name FROM table_sample"

cur.execute(query)
rows = cur.fetchall()
print(rows)
cur.close()
con.close()

sample.pyを実行します。
table_sampleテーブルが取得できることが確認できます。


python3 sample.py 

[(1, 'sample_00'), (2, 'sample_01'), (3, 'sample_02')]

ダンプファイルの作成

次のコマンドにより上記で作成したsampleデータベースのダンプファイルが作成できます。


docker exec 3c44604908f0 sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" sample' > ./sample.sql

sample.sqlをテキストで開くと次のようになり、確かにダンプされていることが確認できます。


-- MariaDB dump 10.17  Distrib 10.5.5-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: sample
-- ------------------------------------------------------
-- Server version	10.5.5-MariaDB-1:10.5.5+maria~focal

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `table_sample`
--

DROP TABLE IF EXISTS `table_sample`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `table_sample` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `table_sample`
--

LOCK TABLES `table_sample` WRITE;
/*!40000 ALTER TABLE `table_sample` DISABLE KEYS */;
INSERT INTO `table_sample` VALUES (1,'sample_00'),(2,'sample_01'),(3,'sample_02');
/*!40000 ALTER TABLE `table_sample` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2020-09-08 21:52:49

ダンプファイルのリストア

次のコマンドにより上記で作成したsampleデータベースのダンプファイルをリストアします。


$ docker exec -i 3c44604908f0 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" sample' < ./sample.sql
Docker×MariaDB 環境構築