【SQL】Dockerを使ったSQL学習環境の構築

【SQL】Dockerを使ったSQL学習環境の構築
Photo by Growtika / Unsplash

以前、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 から確認

ブラウザで:

URL: http://localhost:8080

ログイン例:
サーバ: 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 を実行します。