毎回M1MacでビルドしたDockerイメージからコンテナで動かそうとした時に躓くのでメモ。
M1 Mac環境ではdocker build
するとデフォルトでARMのイメージが作成される。
ECSはARM64とX86_64が選択できるのでまだ良いが、AppRunnerはARM64をサポートしていないので、デフォルトのままではエラーとなる。
ちなみにCahtGPTに聞いてみた。
x86_64
• 概要: x86_64は、64ビットの拡張命令セットを持つx86アーキテクチャです。x86アーキテクチャの拡張版として、より大きなメモリ空間とより多くのレジスタをサポートしています。
• 開発元: 主にインテルとAMD。
• 使用例: 主にデスクトップコンピュータやサーバーなどの高性能なコンピュータで使用されます。
• 特性: 32ビットのソフトウェアとの互換性があり、長い間パソコンの標準アーキテクチャとして広く普及しています。
amd64
• 概要: amd64は、AMDが開発した64ビット拡張命令セットで、x86_64と互換性があります。
• 開発元: AMD。
• 使用例: ほぼx86_64と同義で、同じ用途や機器で使用されます。
• 特性: AMDが自社製品向けに策定した名称で、x86_64と同じものとして扱われます。64ビットコンピューティングを可能にし、より大きなメモリとパフォーマンスの向上を実現します。
ARM64
• 概要: ARM64は、64ビットのARMアーキテクチャです。モバイルデバイスや組み込みシステム、エネルギー効率が求められる環境で広く使われています。
• 開発元: ARM Holdings。
• 使用例: スマートフォン、タブレット、Raspberry Pi、Appleの最新のMシリーズチップなど。
• 特性: 省電力で効率的な設計が特徴で、モバイルデバイスや省電力が求められる場面で優れています。アーキテクチャはRISC(Reduced Instruction Set Computer)に基づいており、シンプルな命令セットで高効率を実現します。
設定方法
具体的な設定方法は2つ。
1. Dockerfileで--platform=〇〇
で指定する。
FROM --platform=linux/arm64 nginx:latest
2 docker build
コマンドの際に指定する。
.zsh
$ docker build --platform 00
ちなみに指定できるアーキテクチャは以下。
個人的にはDockerfileに書いておいた方が色々楽そう。(どちらもCIでやる場合はあまり変わらないか、、)