M1 Silicon MacでDocker+MySQL

前回では、Windows10+WSL2環境でDocker+MySQLを動作させていましたが、今回はM1 Apple Silicon(Arm64)版Macbook Airで動作させるところまでの備忘録。

DockerはPreview版を使う(2021年1月現在)

Macの場合、Docker Desktopをインストールする必要があるが、M1 Macではアーキテクチャーが変わっていて、正式版はまだリリースされていない。プレビュー版が以下にあるので、どうしても使いたい場合はDLする。

https://docs.docker.com/docker-for-mac/apple-m1/

ダウンロード後、コンソールからdocker、docker-composeコマンドが使えることを確認する。

> docker -v
Docker version 20.10.1, build 831ebeae96
> docker-compose -v
docker-compose version 1.27.4, build 40524192

Docker版MySQLインストール

さっそくMySQLをpullしてみると、

> docker pull mysql:8.0.23
8.0.23: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries

アーキテクチャが合ってない?のでプルできない。が、解決策が以下にありました。

https://qiita.com/tetsuro_skiing/items/b380223c2611d392620a

直接イメージのIDを指定すればプルできる。

> docker pull mysql@sha256:43bf7db32d11e75d8463a8bc077f09af5fb5b84b182b1d74124ddca633093bfa
:

> docker images
REPOSITORY          TAG           IMAGE ID       CREATED       SIZE
mysql               <none>        c8562eaf9d81   4 days ago    546MB

docker-compose.ymlも同様で、上記のイメージIDを指定するようにしておく。

version: '3.5'
services:
  db_serv:
    #image: mariadb:10.5.8
    image: mysql:8.0.23
    image: mysql@sha256:43bf7db32d11e75d8463a8bc077f09af5fb5b84b182b1d74124ddca633093bfa
    container_name: test-db-container
:

実際にコンテナ内で作業できるか確認する。コンテナをまず起動。

> docker-compose up -d
> docker-compose ps
       Name                    Command             State                 Ports              
--------------------------------------------------------------------------------------------
test-db-container    docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp

コンテナ内でmysqlコンソールからログインして、エンジンを確認してみる。

> docker-compose exec db_serv /bin/bash
root@test-db-server:/home# mysql --version
/usr/bin/mysql  Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL)

> mysql -u user1 -p
:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

ちゃんと動作できました。