![見出し画像](https://assets.st-note.com/production/uploads/images/65130626/rectangle_large_type_2_89c5890dae1e44f1a3da7d120bf13643.png?width=1200)
M1, Pro/Max の Mac でDocker-compose を使うときのyml の設定
M1 Mac を使っている開発者が増えてきたのではないでしょうか?
この記事を書いている私も、M1 Pro のMacBook Pro を使っています。
弊社では、開発環境のベースを全てDocker(docker-compose)で行っています。
なので
M1 にしたらそのままの yml では動かなかったりしたので
回避方法などを書きたいと思います。
version: "3.7"
services:
app:
image: [使いたいイメージ名]
platform: linux/x86_64
platform 指定にはほかにもあって
os[/arch[/variant]]
platform: osx
platform: windows/amd64
platform: linux/arm64/v8
のような感じでOS なども指定できます。
なぜこのような記述をするかというと
CPUには、命令セットというCPUを動かすためのルールみたいなものがありまして
有名なのは、x86-x64 のようなintel,AMD のアーキテクチャーでサーバーや旧型の少し前のMac に使われていました。(余談ですが、Mac はIntelの前にPower PCというIBMのものを使っていました、)
そして今回のM1 チップのアーキテクチャはARM プロセッサなので ARMv8.6A というものが採用されています。
命令セットが違うとなにが問題なのか簡単に説明すると
命令コードが違うので
x86互換CPUはx86 ようのバイナリでしか動きません。
なので、armのCPUはarm ようにビルドされたデータが必要なのですが
今まで x86 がメジャーだったので公開されていないことがあります。
なので、今回はとりあえずの措置として Docker 側で linux のx64 モードして動かしています。
現在、有名なプロジェクトだと image がありますが
今後は、ARM用にビルドされたものも増えるかと思います。