2022年8月14日日曜日

Raspberry Pi OSでMariaDB10.8公式Dockerコンテナを使う

Raspberry Pi OSでMariaDB10.8の公式Dockerコンテナを起動してみたので、その手順をまとめておく。


環境


Raspberry Pi OS 64bit with desktop。Docker環境はRaspberry Pi OS 64bitでDockerを使うで作成したもの。
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
$ docker --version
Docker version 20.10.17, build 100c701
$ docker-compose --version
docker-compose version 1.29.2, build unknown


ComposeでMariaDBコンテナを起動

ComposeでMariaDBコンテナを起動するために以下のファイルを用意する。MariaDBのrootパスワードなどは環境変数で設定できる。ここではComposeのサービス名はtestdbとする。MariaDBのデータベースデータは、作成したボリュームをマウントして永続化することで、コンテナを停止しても保持できるようにしておく。

version: "3"
services:
  testdb:
    image: mariadb:10.8
    environment:
      MYSQL_ROOT_PASSWORD: password # データベースrootパスワード
      MYSQL_DATABASE: testdb # 作成するデータベース
      MYSQL_USER: testuser # 作成するデータベースユーザー
      MYSQL_PASSWORD: password # ユーザーパスワード
      MYSQL_ROOT_HOST: localhost # rootでの接続をloalhostからに限定
      TZ: 'Asia/Tokyo' # タイムゾーン設定
    volumes:
      - test_data:/var/lib/mysql # データ保管場所(永続化ボリューム)
      
volumes:
  test_data:


適当なフォルダ(ここではmariadb)を作成し、docker-compose.ymlを配置する。以下のコマンドでコンテナを起動する。

$ docker-compose up -d
Creating network "mariadb_default" with the default driver
Creating mariadb_testdb_1 ... done


コンテナの状態を確認してみる。StateがUpなら起動している。

$ docker-compose ps
      Name                     Command              State    Ports
--------------------------------------------------------------------
mariadb_testdb_1   docker-entrypoint.sh mariadbd   Up      3306/tcp 


コンテナが起動したらデータベースへ接続確認してみる。Composeの環境変数MYSQL_PASSWORDで設定したパスワードで接続できる。

$ docker-compose exec testdb mysql -u root -p -D testdb
Enter password:


接続できたらユーザー情報を確認。rootがlocalhostからの接続に限定されている。

> SELECT host, user FROM mysql.user;
+-----------+-------------+
| Host      | User        |
+-----------+-------------+
| %         | testuser    |
| localhost | mariadb.sys |
| localhost | root        |
+-----------+-------------+


MariaDBの設定

MariaDBコンテナを使うときに、MariaDBの設定を変更したい場合がある。コンテナ上で設定ファイルを変更しても、コンテナを停止したら変更前の状態に戻ってしまうので、MariaDBの設定ファイルをホスト側に用意しておいて、その設定ファイルをマウントしてコンテナ上で有効になるようにする。

MariaDBの設定ファイルはコンテナ上の /etc/mysql/my.cnfで、このファイル内で以下2つのディレクトリ配下の拡張子cnfのファイルを読み込むように設定されている。/etc/mysql/conf.d/配下は空で、デフォルトの状態だと/etc/mysql/mariadb.conf.d/配下のファイルの設定が読み込まれる。

/etc/mysql/mariadb.conf.d/
/etc/mysql/conf.d/

Docker HubのMariaDB公式イメージによると、コンテナのMariaDB設定を変えるには、ホストにあるカスタム設定ファイルを、コンテナ上の/etc/mysql/conf.d/配下のファイルとしてマウントするといいらしい。

ここでは、コンテナ上の/etc/mysql/mariadb.conf.d/配下のデフォルトの設定ファイルをホストにコピーして、設定を変更し、それらのファイルをコンテナの/etc/mysql/mariadb.conf.d/にマウントする。

まずは、コンテナ上の/etc/mysql/mariadb.conf.d/配下の設定ファイルを、ホストに作成したconfigディレクトリ配下にconf.dとしてコピーする。

$ mkdir config
$ docker cp mariadb_testdb_1:/etc/mysql/mariadb.conf.d config/conf.d

コピーしたファイルのうち、設定ファイル以外のファイルを削除しておく。

$ rm -rf config/conf.d/99-enable-encryption.cnf.preset


今回は、文字コードと照合順序の設定を変えてみる。文字コードはutf8mb4、照合順序はutf8mb4_binにする。ホストからコピーしたファイルのうち、50-server.cnfと50-client.cnfをそれぞれ以下のように変更または追記する。

50-server.cnf

[mysqld]
character-set-server  = utf8mb4
collation-server = utf8mb4_bin

50-client.cnf

[client]
default-character-set = utf8mb4


docker-compose.ymlには、MariaDB設定ファイルをマウントする行を追加する。
version: "3"
services:
  testdb:
    image: mariadb:10.8
    environment:
      MYSQL_ROOT_PASSWORD: password # データベースrootパスワード
      MYSQL_DATABASE: testdb # 作成するデータベース
      MYSQL_USER: testuser # 作成するデータベースユーザー
      MYSQL_PASSWORD: password # ユーザーパスワード
      MYSQL_ROOT_HOST: localhost # rootでの接続をloalhostからに限定
      TZ: 'Asia/Tokyo' # タイムゾーン設定
    volumes:
      - test_data:/var/lib/mysql # データ保管場所(永続化ボリューム)
      - ./config/conf.d:/etc/mysql/conf.d:ro # MariaDBの設定ファイル
      
volumes:
  test_data:

設定を反映させるためにコンテナを再起動する。
$ docker-compose restart

変更した設定が反映されているか確認する。まずはDBに接続。
$ docker-compose exec testdb mysql -u root -p -D testdb
Enter password:


文字コードの設定を確認する。

MariaDB [testdb]> SHOW VARIABLES LIKE "%character%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8mb3                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+ 


照合順序の設定を確認するには以下コマンド。

MariaDB [testdb]> SHOW VARIABLES LIKE "%collation%";
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_bin        |
| collation_server     | utf8mb4_bin        |
+----------------------+--------------------+


0 件のコメント:

コメントを投稿