🛑

M1以降(M2,M3)MacからビルドしたDockerイメージをECSやAppRunnerで動かすときのメモ

2024/11/15に公開

毎回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コマンドの際に指定する。

https://docs.docker.jp/engine/reference/commandline/buildx_build.html

$ docker build --platform 00

ちなみに指定できるアーキテクチャは以下。

https://github.com/docker/buildx/blob/master/docker-bake.hcl

個人的にはDockerfileに書いておいた方が色々楽そう。(どちらもCIでやる場合はあまり変わらないか、、)

GitHubで編集を提案

Discussion