📜  在 ARM 64 位上构建多架构 Docker 映像 - CSS (1)

📅  最后修改于: 2023-12-03 15:07:37.169000             🧑  作者: Mango

在 ARM 64 位上构建多架构 Docker 映像

Docker是非常流行的应用程序容器化解决方案,它可以在任何系统上运行,只要系统上的Docker引擎符合要求。Docker映像文件是Docker引擎能够理解的打包文件,它封装了应用程序及其依赖的所有组件。在构建Docker映像文件时,必须考虑要在哪些架构上运行。

在本文中,我将向您展示如何在ARM 64位架构上构建多架构Docker映像文件。这对于嵌入式设备,如边缘计算领域,具有重要意义。

构建多架构Docker映像文件

在构建我们的Docker映像文件之前,我们首先需要在我们的ARM 64位开发环境上安装一些必要的工具:

$ sudo apt-get update
$ sudo apt-get install -y qemu-user-static binfmt-support

接下来,我们需要启用binfmt_misc内核模块,该模块可以将不同架构的二进制文件注册到系统中,以便运行时可以自动选择正确的QEMU虚拟化工具。

$ sudo modprobe binfmt_misc
$ echo 'binfmt_misc' | sudo tee -a /etc/modules

现在我们需要添加ARM 32位和ARM 64位的支持:

$ sudo echo ':qemu-arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:CF' | sudo tee /proc/sys/fs/binfmt_misc/register
$ sudo echo ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:CF' | sudo tee /proc/sys/fs/binfmt_misc/register

现在我们可以构建多架构Docker映像文件了,首先,我们要编写一个Dockerfile,该文件指定了我们要构建的图像及其设置:

FROM arm64v8/debian:buster-slim
RUN apt-get update && apt-get install -y curl
CMD [ "/bin/bash" ]

这里我们使用了Debian 10作为基本映像,安装了CURL。接下来,我们使用以下命令构建Docker映像:

$ docker buildx build --platform linux/arm64,linux/arm/v7 -t myimage:latest --push .

此命令将会使用docker buildx构建工具为ARM 64位和ARMv7创建构建环境,并生成两个不同的映像文件。结果,我们将得到一个多架构的Docker映像文件:

$ docker image ls myimage
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myimage             latest              c807b3d8f062        3 seconds ago       44.3MB

现在我们已经成功地在ARM 64位系统上构建了一个多架构Docker映像文件,该映像可以在不同的ARM架构上运行。

总结

在本文中,我们介绍了如何在ARM 64位系统上构建多架构Docker映像文件。我们需要安装必要的工具,启用binfmt_misc内核模块,并编写Dockerfile以构建我们的映像文件。通过使用docker buildx构建工具,我们可以轻松地创建适用于多个ARM架构的Docker映像文件,这对于嵌入式设备领域具有重要意义。