LoginSignup
13
2

More than 1 year has passed since last update.

MacBookAir(Apple M1 チップ)でMySQLのDockerイメージ・コンテナを起動したい。

Posted at

INDEX
1. やりたいことを確認する。
2. 課題(エラーの状況、不明点、エラーログ)を確認する。
3. 調査する(ググる、ドキュメントを読む)
4. 調査結果からの考察、対策を実行する。

1. やりたいことを確認する。

  • Docker について、MySQL:5.6 イメージのコンテナを起動したい。
  • 使用PCは、SES出向先の支給の MacbookAir(M1チップ)

2. 課題(エラーの状況、不明点、エラーログ)を確認する。

SES出向先の支給のMacbookAir(M1チップ)で、いつも通り、mysql:5.6のイメージのコンテナを起動しようとしていた。

$ docker-compose up -d --build

〜略〜

 => ERROR [internal] load metadata for docker.io/library/mysql:5.6                                                                                                                                                                                                         2.4s
------
 > [internal] load metadata for docker.io/library/mysql:5.6:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:20575ecebe6216036d25dab5903808211f1e9ba63dc7825ac20cb975e34cfcae: not found
ERROR: Service 'db' failed to build : Build failed

あれ、エラー!…起動していない。

$ docker-compose ps
Name   Command   State   Ports
------------------------------

3. 調査する(ググる、ドキュメントを読む)

エラー文の「[internal] load metadata for docker.io/library/mysql:5.6」で検索してみる。

調査① M1チップ起因っぽい。

海外の情報で、「MySQL5.7はM1 Macに対応していないから、MySQL Server5.7を使うといいよ。」というネタを発見しました。

DBのDockerfileを修正してMySQL Server5.7のイメージを使うようにします。

mysql/mysql-server イメージに切り替えればいいみたいだ。

調査② mysql イメージと mysql/mysql-server イメージ って何が違うの?

Docker Hub で見比べてみよう。

mysql - Docker Hub

mysql/mysql-server - Docker Hub

ふむふむ、どっちも公式っぽいけど、何が違うのかは…よくわかりません。

代替として、mysql公式が用意している、mysql-serverイメージを使います。こちらはarm版もあります。

arm版 というのが肝!…arm って何?

調査③ arm って何?

2006年からインテル製のCPUをMacに搭載してきたAppleは2020年11月、Armベースの自社開発のチップ「M1チップ」を採用した「MacBook Air」「13インチ MacBook Pro」「Mac mini」をリリースし、その性能とともにPC市場に大きなインパクトを与えた。

Apple M1は、AppleがMac及びiPad向けにARMアーキテクチャのライセンスを受けて設計したシステムオンチップ(SoC)である。

引用元:Apple M1 - Wikipedia

ARMアーキテクチャ とは、ARMホールディングスの事業部門であるARM Ltdにより設計・ライセンスされているアーキテクチャである。組み込み機器や低電力アプリケーションからスーパーコンピューターまで様々な機器で用いられている。

引用元:ARMアーキテクチャ - Wikipedia

なるほど。

Apple M1 チップは、 ARMアーキテクチャ がベースで、Dockerイメージは mysql/mysql-server にのみ Arm版 があるため、 mysql/mysql-server のイメージを使用する。

ということのようです。

4. 調査結果からの考察、対策を実行する

  • 編集:docker/mysql/Dockerfile
- FROM mysql:5.6
+ FROM mysql/mysql-server:5.6

# timezone environment
ENV TZ=Asia/Tokyo

COPY ./docker/mysql/my.cnf /etc/mysql/conf.d/my.cnf
COPY ./docker/mysql/initdb.d /docker-entrypoint-initdb.d

CMD [ "mysqld", "--character-set-server=utf8", "--collation-server=utf8_unicode_ci" ]

Dockerイメージからコンテナを作成&起動してみる。

$ docker-compose up -d --build

...

Creating sample_db_1 ... done
Creating sample_app_1 ... done
Creating sample_web_1 ... done

$ docker-compose ps
              Name                            Command                       State                   Ports
------------------------------------------------------------------------------------------------------------------
sample_app_1   docker-php-entrypoint php-fpm    Up                      9000/tcp
sample_db_1    /entrypoint.sh mysqld --ch ...   Up (health: starting)   0.0.0.0:3306->3306/tcp
sample_web_1   /docker-entrypoint.sh ngin ...   Up                      0.0.0.0:80->80/tcp

Dockerコンテナ起動しました!

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2