はじめに
私は今「おうちで学べるデータベースのきほん」という本でRDBMSの学習を進めているのですが、MySQLサーバーを起動してworld databaseを使ってみるというところで、どうせならDockerを利用してみようと思い今回の記事執筆に至りました。至らぬ点もあるかとは思いますが、どうかお付き合いください。
実行環境
- 機種名:MacBook Pro 2021
- チップ:Apple M1 Pro
- メモリ:16GB
- OS:macOS Ventura 13.3.1
- Docker version:23.0.5
やりたいこと
- Docker上にMySQLのコンテナを立てる
- MySQLのバージョンは5.7
- MySQLでExample Databasesのworld databaseを使う
やってみる
1. docker hubを確認
docker hubのMySQLのページをまずは確認します。
注意
Dockerfileのリンクが変わっているところに注意してください。
今までと同じようにFROM mysql:5.7と書いてしまうとoraclelinuxで起動してしまいます。すると、
RUN apt-get updateが実行された時に、
apt-get: command not found
と怒られてしまいます。
2. Dockerfileを作成
先ほどの点に注意して、MySQLのバージョンを指定する時に-debianを追記しておきます。
さらに、今回はzipファイルをWeb上からダウンロードして、解凍する必要があるため、wgetとunzipをインストールしておく必要があります。
最後にzipファイルのダウンロード先と解凍したファイルの移動先を指定します。
FROM mysql:5.7-debian
ENV MYSQL_ROOT_PASSWORD=root_pass
RUN apt-get update
RUN apt-get install -y wget unzip
RUN wget https://downloads.mysql.com/docs/world-db.zip
RUN unzip world-db.zip
RUN mv world-db/world.sql /docker-entrypoint-initdb.d/world.sql
3. docker-compose.ymlを作成
platformを指定したいので、docker-compose.ymlも作成していきます。
ポートは利用している場合適宜変えてください。
注意
platformを指定せずDockerfileだけで起動しようとすると以下のようにエラーが出ます。
failed to solve: mysql:5.7-debian: no match for platform in manifest
version: "3"
services:
db:
container_name: mysql-5.7
build:
dockerfile: Dockerfile
platform: linux/x86_64
ports:
- 3306:3306
4. コンテナを起動する
先ほど作成したファイルをもとにコンテナを起動します。
% docker-compose up -d
5. コンテナに入る
起動したコンテナの名前「mysql-5.7」とbashを指定して中に入ります。
% docker exec -it mysql-5.7 bash
6. MySQLに入る
今回はrootでMySQLの中に入ります。
-uでユーザーを指定して、-pまで打ったらエンターを押してください。
root@d873265e9473:/# mysql -u root -p
7. MySQLのパスワードを入力する
以下のような表示が出たら、パスワードを入力してください。
今回はDockerfileでENV MYSQL_ROOT_PASSWORD=root_passと指定しているので、「root_pass」がMySQLのrootのパスワードになります。
Enter password:
8. world databaseのサンプルが開けるか確認する。
8-1. データベースが表示できるか確認する。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
+--------------------+
5 rows in set (0.01 sec)
8-2. テーブルが表示されるか確認する。
mysql> use world;
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
3 rows in set (0.01 sec)
無事サンプルが入っていましたね。
ここまでくれば大丈夫そうです。
あとは本に従って学習を進めていきましょう!!!
おわりに
今回久しぶりにDockerを起動するにあたり、以前使用していたDockerfileやdocker-composeをそのまま使えるのでは!?と思い動かしてみましたが、やっぱりダメでした。。。
なんでダメなのか設定を見直していくうちに「なんか2年前と違う!!!」っていうところを2点見つけたため、注意として残してあります。理由は文中に残してありますが、使わないうちにあっという間に置いてかれるなぁと感じました。
これからは普段からどんどん使っていこうと決意したのでした。。。