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/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
50-client.cnf
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
$ 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 件のコメント:
コメントを投稿