【初学者向け】Dockerでデータベースを操作してみよう！(MySQL)

# はじめに
この記事ではデータベースの操作を練習したい初学者の方に向けて、Dockerを用いて環境構築を行う手順を紹介します。
サクッと環境構築ができて、データベースの操作も学べ、しかもDockerの勉強にもなるような、一石三鳥の記事となっています。
では、やっていきましょう！( ^ω^ )

:::note warn
注意！
コマンドの中に () がついている箇所が複数あります。
それらについてはご自身で指定して、忘れないようにメモなどするようにしてください。
また複数行にわたるコマンドの際は、エディタで編集してから貼り付けるなどしてください。
※ 一応、()を外しただけでもちゃんと動くようにはなっています。
:::


# 1. Docker Desktopのインストールと実行
   まず「Docker Desktop」をインストールする必要があります。
以下のリンクから最新版をダウンロードしてインストールしてください。

[Download Docker Desktop | Docker](https://www.docker.com/products/docker-desktop/)

インストールが完了したら、Docker Desktopを起動してください。
起動すると画面上部のバーにDockerのアイコンが表示されます。



# 2. MySQLのイメージを取得
次にMySQLのイメージを取得します。ターミナルで以下のコマンドを実行して、最新のMySQLイメージを取得しましょう。
```
docker pull mysql:latest
```
ちゃんとpullできているか、下記のコマンドで確認してみましょう。
   ```
   docker images
   ```
REPOSITORYのところに mysql があればOKです！



# 3. ボリュームの作成
MySQLに投入したデータを永続化するために、以下のコマンドでボリュームを作成します。

```
docker volume create (mysql-data)
```



# 4. MySQLコンテナの起動
以下のコマンドを実行して、MySQLのコンテナを起動します。このコマンドでは、MySQLのデータを永続化するために先ほど作成したボリュームを使用しています。また、環境変数を設定してMySQLの初期設定を行っています。

```
docker run -d \
  --name (mysql-container) \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=(your_root_password) \
  -e MYSQL_DATABASE=(your_database_name) \
  -e MYSQL_USER=(your_username) \
  -e MYSQL_PASSWORD=(your_password) \
  -v (mysql-data):/var/lib/mysql \
  mysql:latest
```

<details><summary>各オプションの簡単な解説</summary>

- `-d`: コンテナをバックグラウンドで実行
- `--name`: コンテナの名前を設定
- `-p`: ポートのマッピング(ホスト側のポート:コンテナ側のポート)
- `-e`: 環境変数の設定
- `-v`: ボリュームのマッピング (ボリューム名:コンテナ内のディレクトリ)
- `mysql:latest`: 使用するDockerイメージ名
</details>

以下のコマンドで、ちゃんとコンテナが起動しているか確認してみましょう。
```
docker ps
```
NAME に mysql-container があればOKです！

# 5. MySQLへ接続
コンテナ内のMySQLサーバーに接続するには、まず`docker exec`コマンドを使ってコンテナ内でシェルを実行し、次にそのシェルでMySQLクライアントツールを実行します。
以下のコマンドを実行して、MySQLサーバーが動作しているコンテナに接続します。

```
docker exec -it (mysql-container) bash
```
<details><summary>各オプションの簡単な解説</summary>

- `-it`: 対話的に操作するためのオプションです。
- `(mysql-container)`: 接続するコンテナの名前です。
- `bash`: コンテナ内で実行するシェルコマンドです。
</details>


コンテナ内のシェルが開いたら、`mysql`コマンドでMySQLクライアントツールを実行して、MySQLサーバーに接続します。
以下のコマンドを実行すると、パスワードの入力を求められますので、`(your_password)`を入力してください。
```
mysql -u (your_username) -p
```
<details><summary>各オプションの簡単な解説</summary>

- `-u (your_username)`: MySQLサーバーに接続する際のユーザー名を指定します。
- `-p`: パスワードを入力するプロンプトが表示されることを指定します。このオプションを指定すると、コマンドを実行した後にパスワード入力が求められます。
</details>


これでコンテナ内のMySQLサーバーに接続することができました。
対話型のクライアントツールを使って、データベースの操作ができます。



試しに、以下のコマンドでMySQL内のデータベースの一覧を表示してみましょう。
```sql
SHOW DATABASES;
```
注意: 今後、SQLコマンドはセミコロン（;）で終わらせて実行してください。

先ほど作成した`(your_database_name)`があればOKです！(o^^o)

# 実際にテーブルを作って、データを入力してみよう！
試しにユーザーを管理する usersテーブル を作成してみましょう！
カラムは id, name, age, gender, countory とします。

- 使用するデータベースを選択
  ```sql
  USE (your_database_name);
  ```

- `users`テーブルを作成

  ```sql
  CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL,
    gender ENUM('male', 'female') NOT NULL,
    country VARCHAR(255) NOT NULL
  );
  ```

- `users`テーブルにサンプルデータを投入

  ```sql
  INSERT INTO users (name, age, gender, country) VALUES
    ('Alice', 30, 'female', 'United States'),
    ('Bob', 25, 'male', 'Canada'),
    ('Charlie', 22, 'male', 'United Kingdom');
  ```



- テーブルの中身を確認してみよう！
  テーブルの内容を表示するには、`SELECT`文を使います。
  以下のコマンドは、指定されたテーブルのすべてのカラムとすべての行を表示します。
  ```sql
  SELECT * FROM users;
  ```
`users`テーブルのすべてのカラムと行が表示されましたね。

では`exit;`コマンドでMySQLサーバーから抜けて、`exit`コマンドでコンテナからも抜けて、`docker stop (mysql-container)`コマンドでコンテナを停止しましょう。

またDBをいじる時は、`docker start (mysql-container)`でコンテナを起動して、
`docker exec -it (mysql-container) bash`でコンテナの中に入り、
`mysql -u (your_username) -p`でMySQLサーバーにログインしましょう。


# 最後に
お疲れ様でした！
以上で、Dockerを使ってMySQLの環境を構築する手順が完了となります。

データベースが絡むと途端に難しくなりますよね〜。
でも避けては通れない分野なので、お互い頑張りましょう！
それではまた！(^_^)ﾉｼ