Apple Silicon搭載のMacでamd64のDockerイメージを動かす方法

M1やM2チップ搭載のMacを使う人とそうでないPCを使う人が共同で同じDockerイメージを使って開発をする場合、

ホストマシン間の命令セットアーキテクチャーの違いでDockerコンテナが作成できなかったりする問題が発生することがあります。

 

例えば、Macに搭載されているApple SiliconがARM64アーキテクチャーで動いている一方で、
それ以外のPCでAMDやIntel製のx86_64アーキテクチャーのプロセッサー (RyzenやIntel Coreシリーズ) を使用している状況です。

 

Docker Hubから配布されているイメージで両方のアーキテクチャーをサポートしているものを
そのまま利用してる場合などではこのような問題は起きないでしょう。

 

しかし例えば以下のDockerfileのようにRemiのPHPを利用している場合は、x86_64アーキテクチャーのホストではうまく動作しますが、ARM64アーキテクチャーのマシンでは以下のようなエラーで止まってしまいます。

 


 

また、ARM64はサポートしていないイメージ (mysql:5.7.42) をどうしても使いたい場合があるかもしれません。

これらのような問題に対するひとつの解決策は、
Apple SiliconのMacでRosetta 2を使いx86_64アーキテクチャーのイメージを動かすことです。

 

Rosetta 2とは、AppleがApple Siliconのために開発したx86_64命令からARM64命令への変換器です。

 

デフォルトではインストールされていいませんが、
以下コマンドを実行することで手動でインストールできます。

 

次にRosettaをDockerで使えるようにするため、以下のように設定をします (画面はDocker Desktop for Macです) 。

Docker Desktopの設定で、

「Features in development」-> 「Use Rosetta for x86/amd64 exmulation on Apple Silicon」

にチェックを入れて「Apply & restart」をクリックしてください。

 

 

そしてDockerで指定のアーキテクチャーで動作させるため、
docker-compse.ymlでは”platform: linux/amd64″をARM64で動かしたいサービスに追加します。

コマンドではオプションで–platform linux/arm64を指定します。

 



❏❏ TOPIC ❏❏ ------------------------------------------------------------

カスタム自由!フリーECサイトパッケージ
チャットボット導入サービス
WEBシステム開発・スマホアプリ開発はSRIAへ