M1 MacBookAirでamd64(x86_64)のコンテナイメージをビルドして実行する方法を検討しました. 現状Experimentalな機能を使用しているので,プロダクションでの使用は注意してください.
- MacBook Air (M1, 2020)
- macOS Big Sur 11.1
- Docker Desktop Technical Preview(2020/12/18にダウンロード)
platform
オプションを指定すればよい.
ただし,コンテナイメージが指定したプラットフォームに対応している必要がある.
対応しているかはDockerHubを参照のこと.
$ docker run --platform=linux/amd64 python:3.9-slim-buster uname -a
Linux c5259b863504 4.19.104-linuxkit #1 SMP PREEMPT Sat Feb 15 00:49:47 UTC 2020 x86_64 GNU/Linux
DockerfileのFROM
でplatform
を指定する.
FROM --platform=linux/amd64 python:3.9-slim-buster
...
あとはいつも通り.
$ docker build .
または,buildx
を使用する.この方法だとコマンドライン引数からプラットフォームを指定できる.
$ docker buildx build --platform=linux/amd64 .
docker-compose.ymlのサービスの設定でplatform
を指定する.
version: '3.8'
services:
db:
container_name: my-db
image: mysql:5.7
platform: linux/amd64
app-server:
container_name: my-app-server
platform: linux/amd64
image: <url or hash>
あとはいつも通り.
$ docker-compose up
理由は不明だが,docker-compose build
はservices
のplatform
を考慮してビルドが行われなかった.マニュアルにはbuildも動くと書いてあるが,これは別の設定が必要かバグかもしれない.