DockerよりMySQLを使用する


Dockerを通じてMySQLを使⽤するための起動や使⽤方法について記録しました。

# 環境

- macOS Big Sur 11.1　(Silicon m1 chip)
- Docker 20.10.6 


# 事前準備
- MySQL Workbench

MySQL Workbench は、データベースアーキテクト、開発者、DBA のための統合ビジュアルツールです。（[公式サイト](https://www.mysql.com/jp/products/workbench/)より）

インストールの仕方は主に二つあります：
1. [公式サイトで提供されたインストーラ](https://dev.mysql.com/downloads/workbench/)にてインストールします。
2. macOSの場合は、[homebrewでのインストール](https://formulae.brew.sh/cask/mysqlworkbench)が可能です。




# Docker環境でDBに接続する手順（MySQL）



MySQLのイメージファイルをpullするには、[MySQLのDocker Hub](https://hub.docker.com/_/mysql)で[使用したいバージョンのTag](https://hub.docker.com/_/mysql?tab=tags)を指定します。


M1 Macを使っているので CPU アーキテクチャは ARM ですが、[公式リファレンス](https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/apple-silicon/)にも、「Intel イメージの実行には、エミュレーションのもとで--platform linux/amd64をつけて実行することが必要です。 特に mysql イメージは ARM64 向けには利用できません。 これに対する当面の対処としては mariadb イメージを利用してください。」という記述があります。色々と調べたら、[この記事により](https://ichi-station.com/docker-mysql-for-m1-mac/)、`platform` を `linux/x86_64` に指定することでミュレーションとして動作することが解りましたので、この方式で進めます。

```
$ docker pull  --platform linux/x86_64 mysql:8  
8: Pulling from library/mysql
15115158dd02: Pull complete 
d733f6778b18: Pull complete 
1cc7a6c74a04: Pull complete 
c4364028a805: Pull complete 
82887163f0f6: Pull complete 
097bfae26e7a: Pull complete 
e1b044d6a24f: Pull complete 
cd2978bd4d12: Pull complete 
28bce5cc1677: Pull complete 
907b6d695760: Pull complete 
c5049403458b: Pull complete 
f360718d6f4e: Pull complete 
Digest: sha256:0eb33f0094ef5351639d9d9847c963ee9f22f5631cde046babd4ec239aaeaf06
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8
```

イメージがうまくpullされたか確認します。

```
$ docker images  
REPOSITORY                    TAG       IMAGE ID       CREATED        SIZE
mysql                         8         c1558761f285   3 days ago     519MB
```



作業用ディレクタリを作成します。

```
$ mkdir docker_mysql
$ cd  docker_mysql
```

先ほどpullしたMySQLイメージでコンテナを回すため、作業用ディレクタリに以下のYAMLファイル（`docker-compose.yml`）を作成ます。
``` yml
# docker-compose.ymlのバージョン
version: "3.8"　

# services以下にmysql8コンテナの設定を書く　
# services.mysql8.image: 使用するイメージ名称。
# services.mysql8.container_name: コンテナ名称。
# services.mysql8.platform: M1 Macで起動できるように linux/x86_64 を指定する。
# services.mysql8.volumes: マウント・パス
# services.mysql8.environment: 環境変数
# services.mysql8.ports: 公開用のポート
services:
  mysql8: 
    image: mysql:8 
    container_name: mysql8　　
    platform: linux/x86_64 
    volumes:
      - ~/mysql-docker-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 12345    
      MYSQL_DATABASE: mydb          
    ports:
      - "3306:3306"
```

`services.environment.MYSQL_ROOT_PASSWORD`は接続際に使用するパスワードです。

YAMLファイルを作成したら、`docker-compose`でコンテナーをYAMLファイルに書いてあった設定の通りに起動します。
```
$ docker-compose up -d 
Creating network "docker_mysql_default" with the default driver
Creating mysql8 ... done
```



コンテナーがうまく起動されたか確認します。以下の結果が表⽰されたらDocker環境のDBにの接続する準備は完了です。
```sh
$ docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                                  NAMES
8583e916916e   mysql:8   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql8

``` 

以下のコマンドでdocker-compose.ymlで設定したパスワードで接続し、MySQLモニターに⼊ります。

```sh 
$ docker exec -it mysql8 mysql -u root -p
Enter password: 12345
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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> 
```

これでDBへの接続が完了です。

# MySQL workbenchの使用

コンテナーが起動されたら、MySQL Workbenchを起動し、ポート3306（YAMLファイルに設定したポート）に接続してください。MySQL Workbenchの起動画面が表示されます。
![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633453/f1f4dc60-9801-660e-b463-9ae282bae887.jpeg)


DB接続にはYAMLファイルに設定したパスワードを入力します。
![002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633453/61b045e9-ae01-9ab1-c1ad-6cdf0548d655.jpeg)


OKをクリックしたら、MySQL Workbenchが使えます。





# コンテナの停止、削除

コンテナを停止するときには以下のコマンドを入力します。

```sh 
$ docker stop mysql8
``` 

コンテナを削除するには以下のコマンドを入力します。

```sh 
$ docker rm mysql8
``` 




# 参考サイト一覧

https://phoenixnap.com/kb/mysql-docker-container
https://matthung0807.blogspot.com/2020/08/docker-mysql.html