どうもこんにちは。
今回は、Dockerを使用してRailsの環境構築をしていた時につまづいた、「x86_64」「amd64」「arm64」の違いについて調べてみました。
私が使用しているPCはApple Silicon M2チップのMacBookProです。
アーキテクチャについて
x86_64/amd64
この二つのアーキテクチャは、呼び方が異なるだけで同じアーキテクチャを指しているようです。
主にデスクトップやサーバー向けのアプリケーションで使用されています。
arm64
ARMベースのデバイスやサーバーで使用されるアーキテクチャで、特に省電力性や効率性が求められる環境での使用に適しています。
Dockerコンテナへの記述
ARMアーキテクチャを採用しているPCの場合、docker-compose build
を実行した時にアーキテクチャが違いますとエラーが出ることがあります。
その場合、docker-compose.yml
にplatformを指定することで解決できます。
db:
image: mysql:8.0
platform: linux/x86_64 # platform: linux/amd64 でもOK
ports:
- "3306:3306"
volumes:
- ./tmp/volumes/db:/var/lib/mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
補足
ARMアーキテクチャを使用している場合、以下のGemが動作しません。
gem 'listen'
理由として、listen
というGemの内部で動作しているinotify
というシステムコールを使用して動作しているのですが、これがARMアーキテクチャではサポートされていないのが問題のようです。
その場合、listen
を使用しているコードはコメントアウトするとうまく行きます。
以下に例を示しておきます。
I18nJS.listen
を
# I18nJS.listen
に変えてください。