Docker - 如何从 Dockerfile 有条件地为 M1 Mac 或 AMD 构建映像?

ner*_*lip 5 build docker dockerfile

一些背景:
-我是一个Docker新手(从 1 天开始),
-我有一个小VM运行linux/AMD,我拥有一台 M1 Mac ( ARM),
-我还想使用 Container for Dev(而不是虚拟环境) )。

为了在 M1 Mac 上构建我的容器prod,我有以下内容Dockerfile
请参阅--platform=linux/amd64arg in FROM,它可以工作(=我能够部署)。

FROM --platform=linux/amd64 python:3.10-slim-bullseye
WORKDIR /usr/src/app
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_ENV=development 
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
Run Code Online (Sandbox Code Playgroud)

但是,如果我想为本地开发构建,我怎么能在我的声明中Dockerfile说不使用呢? 我见过一些关于 SO 的帖子,其中有条件但仅用于命令。 有什么想法或最佳实践吗? 谢谢。--platform=linux/amd64
dockerfile RUN

Loy*_*yen 5

我相信您可以使用docker buildx builddocker build--platform上的参数来设置平台来构建图像,如果没有指定其他内容,该图像将在任何调用中使用(请参阅Dockerfile FROM),如文档中所述。FROMDockerfile

然后,您可以在需要时使用TARGETPLATFORM变量Dockerfile来获取正在构建的平台。如果要更改构建的默认平台,可以设置DOCKER_DEFAULT_PLATFORM环境变量。