DockerでARM版イメージを使うときにハマらないための備忘録
最近、PCをSnapdragon搭載のWindows機に買い替えて個人開発をしていたんですが、普通に使っているつもりでも「あれ?なんか挙動がおかしいな」とか「起動しないな」と感じることがあり、今後もARMアーキテクチャのマシンで開発を行う機会も増えてくると思うので、書き残しておきます。
明示的に指定しないとうまく動かないことがある
結論から言うと、Dockerイメージを使用するときに、明確にArm版を使用するようにしないとうまく動作しないことがあるんです。
通常、Docker Desktopなどがよしなに解決してくれることもあるのですが、謎のエラーで落ちたり、コンテナが起動しなかったりすることがあります。
Node.jsやPythonといったよく使うランタイムでもこの現象は起こり得ます。なんとなく FROM python:3.9 と書いて安心していると、裏側で意図しないアーキテクチャのものが降ってきている可能性があるわけです。
確認先について
じゃあどれを使えばいいのかという話ですが、ARM版のイメージはこちらから確認できます。
ここにあるような arm64v8 タグがついているものや、公式イメージの中でもアーキテクチャが明記されているものを意識して選ぶのが無難ですね。
構成ファイルの書き方
例えば Dockerfile や docker-compose.yml を書くときも、イメージを意識しておくと安心です。
# Dockerfileの例
FROM arm64v8/python:3.11
WORKDIR /app
COPY . .
CMD ["python", "app.py"]# docker-compose.ymlの例
services:
app:
image: arm64v8/node:22
# ...このようにARM専用のタグがついたイメージを指定することで、問題なく動作させることができます。
以前はあまり気にせず latest を使っていればよかった場面でも、CPUアーキテクチャの違いによって、少し気を使う必要が出てきたという話でした。