【SQL】Dockerを使ったSQL学習環境の構築
以前、MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備をご紹介しましたが、今回はDockerを使って、もっと手軽に前回の学習環境を準備してみたいと思います。
また、HeidiSQLのUbuntu版は日本語対応がいまいちだったので、学習しづらかったため、今回はphpMyAdminを導入してWebブラウザ上でSQLの学習ができるようにもしてみました。
1. 手順
大まかな手順は下記の通りです。
(1) mariadb-employees というカスタムイメージを作る
(2) build 時に GitHub から employees.sql等の必要なファイルをダウンロードして、
MariaDB の/opt/employees-db に配置
(3) コンテナ初回起動時に シェルスクリプト が自動実行され、employees DB にサンプルデータが入る
(4) phpMyAdmin から中身を触って学習できる
2️. ディレクトリ構成
まずは、専用ディレクトリを作ります:
mkdir mariadb-employees
cd mariadb-employees
最終的な構成イメージ:
mariadb-employees/
├─ Dockerfile
├─ docker-compose.yml
└─ db_data/ ← 起動すると自動生成(DBデータ永続化)
3️. Dockerfile(employees.sql 自動ダウンロード)
# Employees サンプルDB用のSQL & dumpファイルを取得
FROM mariadb:11
# employees サンプルDB用のファイルを /opt/employees-db に配置
RUN apt-get update && \
apt-get install -y wget && \
mkdir -p /opt/employees-db && \
cd /opt/employees-db && \
wget -O employees.sql \
https://raw.githubusercontent.com/datacharmer/test_db/master/employees.sql && \
wget -O load_departments.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_departments.dump && \
wget -O load_employees.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_employees.dump && \
wget -O load_dept_emp.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_dept_emp.dump && \
wget -O load_dept_manager.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_dept_manager.dump && \
wget -O load_titles.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_titles.dump && \
wget -O load_salaries1.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_salaries1.dump && \
wget -O load_salaries2.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_salaries2.dump && \
wget -O load_salaries3.dump \
https://raw.githubusercontent.com/datacharmer/test_db/master/load_salaries3.dump && \
wget -O show_elapsed.sql \
https://raw.githubusercontent.com/datacharmer/test_db/master/show_elapsed.sql && \
apt-get purge -y wget && \
rm -rf /var/lib/apt/lists/*
# 初期化時に employees.sql を正しいディレクトリで実行するシェルスクリプトを作成
RUN set -eux; \
{ \
echo '#!/bin/bash'; \
echo 'set -e'; \
echo 'cd /opt/employees-db'; \
echo 'echo "Loading employees sample database..."'; \
echo 'mariadb -u root -p"$MYSQL_ROOT_PASSWORD" < employees.sql'; \
} > /docker-entrypoint-initdb.d/01-load-employees.sh; \
chmod +x /docker-entrypoint-initdb.d/01-load-employees.sh
4️. docker-compose.yml(MariaDB + phpMyAdmin)
同じディレクトリに docker-compose.yml を作成:
services:
mariadb:
build:
context: .
dockerfile: Dockerfile
image: mariadb-employees:latest
container_name: mariadb-employees
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpass
# MYSQL_DATABASE は employees.sql 側で作られるので指定しなくてもOK
MYSQL_USER: sampleuser
MYSQL_PASSWORD: samplepass
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "3306:3306"
volumes:
- ./db_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin:5
container_name: mariadb-phpmyadmin
restart: unless-stopped
environment:
PMA_HOST: mariadb
PMA_USER: root
PMA_PASSWORD: rootpass
UPLOAD_LIMIT: 64M
ports:
- "8080:80"
depends_on:
- mariadb
5️. ビルド & 起動
このディレクトリで以下を実行:
# イメージビルド + コンテナ起動
docker compose up -d
6️. phpMyAdmin から確認
ブラウザで:
ログイン例:
サーバ: mariadb(または localhost)
ユーザー: root
パスワード: rootpass
左側に employees データベースが見え、employees, salaries, departments などのテーブルがあり、中にレコードが存在すれば成功です。
7️. データをリセットしたいとき
データの初期化
employees.sql は 初回起動時だけ 実行されるので、やり直したくなったら:
docker compose down
rm -rf db_data
docker compose up -d
これでまた最初から employees.sql が流れて、キレイな状態で学習再開できます。
再ビルド
Dockerfileを書き換えた場合など、buildも初めからやり直したい場合は、
dokcer compose up -d --build を実行します。