越多越好:多拱Docker体现与Buildx和Artifactory

云原生的“一次构建,随处部署”的承诺几乎实现了。与集装箱化和Docker,我们可以为任何环境构建应用程序和服务,并在运行时设置配置。

嗯,……几乎。操作系统和应用程序仍然需要编译才能在特定的体系结构类型上执行。为AMD64处理器编译的软件不能在基于arm的机器上运行,为Linux编译的软件也不能在Windows上运行。

Docker解决了容器应用程序支持多cpu架构和多架构(multi-arch)的需求。您可以为需要支持的每个架构构建映像,然后将该集合捆绑在Docker清单列表中。然后,您可以根据名称和标记部署生成的多拱门图像——Docker客户端将自动选择与目标架构匹配的图像。

这是很容易建立你的多拱图像码头工人注册表在Artifactory,并像其他公司一样管理他们码头工人形象.我们将向您展示如何,以及如何通过您的网站推广这些图像SDLC

多拱图像

在我们的例子中,我们想要一个应用程序,必须能够在Linux操作系统下的两个处理器架构上运行:

  1. x86-64环境,比如你的Linux桌面,
  2. AWS EC2上基于arm的A1实例。

为了能够在任何一个上运行,我们将需要一个多拱映像来支持amd64而且arm64架构。

使用Buildx创建多拱门图像

首先,必须配置DockerFile以根据所需的体系结构构建示例映像。

ARG ARCH= FROM ${ARCH}debian:bust -slim RUN apt-get update \ && apt-get install - y curl \ && rm -rf /var/lib/apt/list /* ENTRYPOINT [" curl "]

如果我们运行码头工人建造这个DockerFile,使用一个——build-arg选项设置参数时,我们可以为每个所需的体系结构构建单个映像。然后,我们需要构建一个单独的清单列表(使用码头工人清单命令)将它们捆绑到一个多拱图像中。

这是可行的,但还有一种更简单(也是首选)的方法。使用buildx通过Docker CLI命令行,你可以创建一个多arch镜像,并将其推送到Artifactory中的Docker注册表:

$ docker buildx build \——push \——platform linux/amd64,linux/arm64 \——output=type=image,push=true,注册表。Insecure =true \——tag myartifactory/docker-local /multiarch-image:标签。

如果你在Mac或Windows上使用Docker Desktop,它附带了buildx。如果你在Linux上,你可以从GitHub安装buildx

Artifactory中的多拱图像

这里是如何完成的multiarch-image存储在Artifactory中,如图所示docker-local码头工人库。

清单列表

清单清单(list.manifest.json)是我们多拱形象的“清单中的清单”。它也被称为“胖清单”,它确定了集中的Docker映像以及每个映像的目标运行架构(操作系统和处理器组合)。

multiarch-image应用程序运行时,Docker CLI将首先拉出清单列表,然后使用它来选择要拉出和部署哪个映像,以匹配目标目的地的操作系统和架构。

建筑图片

受支持体系结构的每个映像都有自己的标记,可以通过它来进行寻址。Docker CLI将用一个摘要标记(manifest.json的sha2校验和)标记每个架构映像。

每个图像都有自己的说明,说明了组成它的层。

推广多拱形象

一旦你的多拱映像在Artifactory的Docker存储库中并通过了测试,你就可以像提升其他Docker存储库一样将映像提升到另一个Docker存储库。

JFrog CLI方法中创建的多拱映像的副本docker-local存储库。

$ jfrog rt docker-promote—copy \ multiarch-image docker-local docker-target

与任何Docker图像一样,您也可以将推广限制在图像中的某个标记上。如果您选择重命名促销中的标签,它将为多拱图像中的每个建筑重命名。

$ jfrog rt docker-promote -copy \——source-tag " latest "——target-tag " latest-new " \ multiarch-image docker-local docker-target

保持最佳实践

通过SDLC驱动多拱门图像可能意味着更复杂的测试和验证,因为每个受支持的架构可能需要在其目标平台上分别验证。

但是有了Artifactory对多拱图像的支持,您的最佳实践工作流得以保留;您仍然可以只构建一次,然后在开发、测试和生产阶段推广不可更改的映像。

试一试很容易。如果您还没有使用Artifactory,现在就从a开始免费JFrog云账号