Docker で MariaDB サーバを構築
使用環境
- DB: MariaDB
ディレクトリ構成
root
├─volumes
│ ├─csv
│ │ └─sample-data.csv
│ └─initdb.d
│ └─01_create_db.sql
└─docker-compose.yaml
コンテナ起動時に、initdb.d配下の sql ファイルおよびシェルスクリプトが自動実行されます。ファイルの名前順に実行されるので、プレフィックスで順番を制御するのが良いです。
設定ファイル
docker-compose.yaml
DB サーバおよび GUI で DB を管理できるadminerを起動します。
services:
db:
container_name: nob-mariadb
image: mariadb
ports:
- 3306:3306
volumes:
- ./volumes/initdb.d:/docker-entrypoint-initdb.d
- ./volumes/csv:/csv
environment:
- MYSQL_ROOT_PASSWORD=password
# - MYSQL_ALLOW_EMPTY_PASSWORD=true # 空パスワードを許容する
adminer:
container_name: nob-adminer
image: adminer
ports:
- 8081:8080
create_db.sql
テーブル作成、初期データ投入などを行う SQL ファイルです。
-- データベース作成
CREATE DATABASE snaildb;
USE snaildb;
-- テーブル作成
CREATE TABLE nob_table (
id INT PRIMARY KEY AUTO_INCREMENT
, code_name VARCHAR(10)
, age VARCHAR(3)
);
-- 初期データ投入
LOAD DATA LOCAL INFILE '/csv/sample-data.csv' -- コンテナ上のCSVファイル
INTO TABLE
nob_table -- テーブル名
FIELDS
TERMINATED BY ',' -- フィールドの区切り文字
-- ENCLOSED BY '"' -- 各カラムの囲い文字
LINES
TERMINATED BY '\n' -- ラインの区切り文字
IGNORE 1 ROWS -- 最初の1行目を無視する
(id, code_name, age); -- DBのどのカラムに相当するかを明記
サンプルデータは下記で作成しています。
id,code_name,age
1,first-nob,13
2,second-nob,5
コンテナ起動後、コンテナ内からmariadb -u root -pで DB にログインできます。