dockerでMySQLのサンプルデータベースのSakilaを使用した環境をすぐ使用できるように設定してみた

私はdocker初心者です。間違いやもっと良い方法があれば教えていただけるとありがたいです。

---

SakilaとはMySQLが公式で用意しているサンプルデータベースです。

https://dev.mysql.com/doc/sakila/en/

こちらからダウンロードできます

https://dev.mysql.com/doc/index-other.html

DVDレンタル情報が保存されているデータベースで、個人的にはMySQLのデータを使って試したいときに使うというのが便利だと思います。

それをdockerでちょちょっと環境が作成できるようにやってみました。

---

参考

- [docker-compose でMySQL環境簡単構築 - Qiita](https://qiita.com/A-Kira/items/f401aea261693c395966)
- [MySQLのSakila Sample Database を使ってみよう - 主夫ときどきプログラマ](https://masayuki14.hatenablog.com/entry/sakila)


# `Dockerfile`作成

mysqlの公式イメージを使って`Dockerfile`を設定してみました

```Dockerfile:Dockerfile
FROM mysql:8

ENV MYSQL_ROOT_PASSWORD=root

RUN apt-get update \
    && apt-get install -y wget unzip \
    && wget http://downloads.mysql.com/docs/sakila-db.zip \
    && unzip sakila-db.zip \
    # docker-entrypoint-initdb.d/　の　.sql　ファイルが自動でアルファベット順に実行されるので、リネームしつつ移動
    && mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/01_sakila-schema.sql \
    && mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/02_sakila-data.sql
```

`Dockerfile`をビルドしてコンテナ作成

```console
$ docker build -t sample .
(省略)
$ docker run --name sakila -d sample
(省略)
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                 NAMES
a599ee328437        sample              "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp   sakila
```

mysqlに接続し`show tables;`を実行

```console
$ docker container exec -it sakila mysql -uroot -proot -Dsakila
mysql: [Warning] Using a password on the command line interface can be insecure.
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show tables;
+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+
23 rows in set (0.00 sec)

mysql> 
```

Sakilaのサンプルのdbが作成されていることを確認できました

# phpmyadminでも見れるようにしてみた

先ほどの`Dockerfile`と同じディレクトリに`docker-compose.yml`を作成

```docker-compose.yml
version: "3"

services:
    db:
        build: .
        container_name: mysql

    phpmyadmin:
        container_name: phpmyadmin
        image: phpmyadmin/phpmyadmin
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=mysql
            - PMA_USER=root
            - PMA_PASSWORD=root
        ports:
            - 8080:80
```

```console
$ docker-compose up -d
```

http://localhost:8080/

<img width="1022" alt="Screen Shot 2020-08-03 at 0.59.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142910/24dcffc6-eb99-6ef0-f867-87f1d2065a4d.png">

以上です。