1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker で MariaDB を 利用する

Last updated at Posted at 2024-01-04

はじめに

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

余談

  1. 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にしても良いかも
     

  2. 文字コード設定が反映されているかの確認
    以下のSQLを実行すると、文字コード系の設定が表示されます

    SQL実行
    show variables like "collation_server%";
    +------------------+--------------------+
    | Variable_name    | Value              |
    +------------------+--------------------+
    | collation_server | utf8mb4_unicode_ci |
    +------------------+--------------------+
    

    ※失敗時は utf8mb4_general_ci となる

最後に

docker compose up -d で実行すると、設定ファイルが読み込めていないことに気づけませんでした。まずは、 -d のオプションなし(ログ表示)でやってみることも大事ですね…

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?