2020年11月に発表されたMacBook Airから搭載されているM1チップというCPUがあります。こちらは従来のMacに搭載されていたCPUがx86/
今回は、
DockerでMySQLを動かしてみる
まずは、
% docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest Unable to find image 'mysql:latest' locally latest: Pulling from library/mysql docker: no matching manifest for linux/arm64/v8 in the manifest list entries. See 'docker run --help'. %
このようにエラーになってしまいました。エラーの内容としては、
M1向けのDocker for Macでは、
% docker run --platform linux/x86_64 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=password-d mysql:latest Unable to find image 'mysql:latest' locally latest: Pulling from library/mysql 〈省略〉 %mysql -h127.0.0.1 -uroot -ppassword -P3307 mysql>
すでに3306ポートで動いているMySQLがいると、
% docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
表示されている警告は
ということで、
Docker Composeでのplatform指定に関して
Docker Composeは、
version: '3'
services:
mysql:
image: mysql:latest
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 127.0.0.1:3308:3306
platform指定を入れても既存のLinuxユーザやインテルMacのユーザやWindowsユーザは影響を特に受けないので、
MySQL5.7を起動してみる
続いて、latestではなくて、
version: '3'
services:
mysql:
image: mysql:5.7
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 127.0.0.1:3308:3306
docker-compose upをしてみます。
% docker-compose up 〈省略〉 mysql_1 | information that should help you find out what is causing the crash. untitled_mysql_1 exited with code 2
何やらerrorが出て終了してしまいました。たくさん出ているログを眺めていると、
mysql_1 | 2022-03-10T23:41:09.939403Z 0 [ERROR] InnoDB: Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.
Linux Native AIO interfaceがM1向けのDockerでは準備されていないため、
というわけで、
my.
version: '3'
services:
mysql:
image: mysql:5.7
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 127.0.0.1:3308:3306
command: mysqld --innodb_use_native_aio=0
ディスクが中途半端に残っている可能性もあるので、
% docker-compose down -v % docker-compose up 〈省略〉 mysql_1 | Version: '5.7.37' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
ということで、
ちなみに、
mysql_1 | 2022-03-10T23:33:20.291472Z 1 [ERROR] [MY-012585] [InnoDB] Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB. mysql_1 | 2022-03-10T23:33:20.291775Z 1 [Warning] [MY-012654] [InnoDB] Linux Native AIO disabled.
このメッセージはMySQL 5.
別のイメージを使用する
今回は起動オプションを変更することで対応しましたが、
MySQL公式が用意しているDockerイメージがあり、
version: '3'
services:
mysql:
image: mysql/mysql-server:latest
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 127.0.0.1:3308:3306
また、
version: '3'
services:
mysql:
image: mysql/mysql-server:5.7
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 127.0.0.1:3308:3306
この設定でdocker-compose upをしてみましょう。
% docker-compose down -v % docker-compose up 〈省略〉 mysql_1 | 2022-03-11T00:07:29.650417Z 0 [Note] /usr/sbin/mysqld: ready for connections. mysql_1 | Version: '5.7.37' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL)
ということで、
まとめ
今回はM1チップが搭載されたMac上でDockerを動かす方法を紹介しました。MySQL 8は意外と簡単に動かせたのではないかと思います。
MySQL 5.