在Dockerfile中设置基于CPU架构的条件



我需要直接从GitHub下载并安装一个包,并且我需要安装一些库,以便通过pip从源代码开始构建。

为此我使用:

RUN apt-get update && apt-get install -y libavformat-dev libavdevice-dev libavfilter-dev libswscale-dev

RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.30.0/geckodriver-v0.30.0-linux64.tar.gz 
&& tar -xf geckodriver-v0.30.0-linux64.tar.gz 
&& mv geckodriver /usr/local/bin/ 
&& rm geckodriver-v0.30.0-linux64.tar.gz

我想用buildx为不同的平台构建:docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 .

amd64上,我不需要安装av库,因为pip不需要构建任何东西,因为提供了轮子。在arm64arm/v7上,我需要安装库,并且需要下载、提取和复制不同的geckodriver包。

有没有一种方法可以根据CPU架构指定条件语句?

在这篇docker博客文章之后,您有一些预定义的ARG变量,如BUILDPLATFORM,可以用来构建您的图像。

因此,你可以尝试这样的东西:

FROM alpine as arm64
RUN echo "arm64" > /version.txt
FROM alpine as amd64
RUN echo "amd64" > /version.txt
FROM $TARGETARCH as common
RUN date >> /version.txt
CMD ["cat", "/version.txt"]

并使用docker buildx为多个平台编译图像:

$ docker buildx build --platform linux/amd64 -t test .
$ docker run --rm test
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
amd64
Thu May 25 07:54:34 UTC 2023
$ docker buildx build --platform linux/arm64 -t test .
$ docker run --rm test
arm64
Thu May 25 07:53:09 UTC 2023

最新更新