見出し画像

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用にビルドされたものも増えるかと思います。

この記事が気に入ったらサポートをしてみませんか?