はじめに
Docker(compose) での MariaDB 利用方法です。
普段は、PostgreSQLを使うことが大半ではありますが、触ってみました&書き残しメモです。
確認環境
- WSL2(Ubuntu22.04.3 LTS)
- Docker (24.0.6)
- Docker Compose (2.4.1)
- MariaDB (10.11.6-jammy)
フォルダ構成
[projectfolder]
├─ compose.yml
├─ Dockerfile
├─ conf.d
│ └─ my.cnf
└─ initsql
└─ 10_sample1.sql
コード
compose.yml
services:
db:
build:
context: .
ports:
# ポート設定
- '3306:3306'
environment:
# デフォルトのDB
MARIADB_DATABASE: defaultdb
# デフォルトの一般ユーザー
MARIADB_USER: dbuser
# デフォルトの一般ユーザーのパスワード
MARIADB_PASSWORD: dbpass
# 管理者(ユーザー名はroot)のパスワード
MARIADB_ROOT_PASSWORD: rootpass
# タイムゾーン
TZ: Asia/Tokyo
volumes:
# 初回実行するSQL(フォルダごと)
- ./initsql:/docker-entrypoint-initdb.d
# 設定ファイル
- ./conf.d:/etc/mysql/conf.d
# DBの永続化
- db-volume:/var/lib/mysql
# ボリューム設定(永続化のため)
volumes:
db-volume:
name: mariadb-data
driver: local
Dockerfile
# mariadb(投稿時のLTSバージョン)
FROM mariadb:10.11.6-jammy
# ユーザー切り替え
USER mysql
conf.d/my.cnf
# mysqlサーバーの設定
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# クライアントツールの設定
[client]
default-character-set=utf8mb4
10_sample1.sql
-- 事前に実行したSQLをファイル化しておく
-- サンプルのテーブル作成
create table sample1(
id int auto_increment,
col1 text,
col2 text,
primary key (id)
);
-- サンプルのテーブルにデータを登録
insert into
sample1(col1, col2)
values
('aaa', '1111'),
('bbb', '2222');
実行方法
以下のシェルを実行します
shell実行
# プロジェクトフォルダに移動
cd [projectfolder]
# 設定ファイルのパーミッションを変更
sudo chmod 655 conf.d/my.cnf
# コンテナ立ち上げ
docker compose up -d
余談
-
WSLの場合
WSLの場合、/mnt/...
以下に設定すると、パーミッションが変更できませんので、Windows管理の保存領域以外のパスを利用しないといけません。
※起動はされますが、下記のようにDockerのログにmy.cnf
が読み込めない旨のWarningが表示されますmariadb-db-1 | Warning: World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored
また、デフォルトユーザーで構築したい場合には、Dockerfileに
RUN groupmod -g 1000 mysql RUN usermod -u 1000 mysql
を入れてGID,UIDを1000にしても良いかも
-
文字コード設定が反映されているかの確認
以下のSQLを実行すると、文字コード系の設定が表示されますSQL実行show variables like "collation_server%"; +------------------+--------------------+ | Variable_name | Value | +------------------+--------------------+ | collation_server | utf8mb4_unicode_ci | +------------------+--------------------+
※失敗時は utf8mb4_general_ci となる
最後に
docker compose up -d
で実行すると、設定ファイルが読み込めていないことに気づけませんでした。まずは、 -d
のオプションなし(ログ表示)でやってみることも大事ですね…