Open3

sakilaとworldのデータベースが入ったMysqlのコンテナイメージをさくっとつくる

yohaneyohane

「おうちで学べるデータベースのきほん 第2版」でWindowsとクラウド(AWS)での環境の作成の方法はあったけど、Macのはなかったのでメモ代わりに残しておく
といっても、環境をあんまり汚したくなかったのでDockerでイメージを作りdocker composeで起動する形とした。
なので他のOSでも使おうと思えば使えるとは思う。
Dockerとdocker composeをちょっとわかってる人じゃないと厳しいかもしれない。

前提条件

  • docker desktopなどをインストールしておりdocker(composeも)が使える状態になっていること

手順とか

  • Dockerfileとdocker-compose.ymlを同一ディレクトリに配置
  • docker composeコマンドはdocker-compose.ymlのファイルがディレクトリで実施すること

Build&起動

docker compose up -d

停止

docker compose stop

起動

docker compose start

Mysqlに接続したい

docker compose exec mysql mysql -uroot -pOuchiDB2?

完全に削除(Volumeとbuildしたコンテナのイメージも削除する)

docker compose down -v --rmi local

コンテナの中に入ってみたい

docker compose exec mysql /bin/bash

抜けるときはCtrl + dとか

yohaneyohane
Dockerfile
# ベースイメージとしてAlpine Linuxを使用
FROM alpine:3.18 AS downloader

# 必要なツールをインストール
RUN apk add --no-cache wget unzip

# 作業ディレクトリを設定
WORKDIR /tmp

# sakilaデータベースをダウンロードして解凍
RUN wget https://downloads.mysql.com/docs/sakila-db.zip && \
    unzip sakila-db.zip && \
    rm sakila-db.zip

# worldデータベースをダウンロードして解凍
RUN wget https://downloads.mysql.com/docs/world-db.zip && \
    unzip world-db.zip && \
    rm world-db.zip

# MySQLの公式イメージを使用
FROM mysql:8.4

# データベース初期化スクリプトをコピー
COPY --from=downloader /tmp/sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1_sakila-schema.sql
COPY --from=downloader /tmp/sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2_sakila-data.sql
COPY --from=downloader /tmp/world-db/world.sql /docker-entrypoint-initdb.d/3_world.sql
yohaneyohane
docker-compose.yml
services:
  mysql:
    container_name: homedb-mysql
    build:
      context: .
    environment:
      MYSQL_ROOT_PASSWORD: OuchiDB2?
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data: