多多益善|基于Artifactory和Buildx构建多架构Docker镜像

一、背景

在业界当前的云原生实践中,“构建一次,随处部署”的机制已经得到了普遍应用。借助容器化和Docker,我们可以为任何环境构建应用和服务,并在运行时再设置配置。

不过,这种适应性还是有一些限制。操作系统和应用程序仍然需要编译才能在特定的架构类型上执行。例如,为AMD64处理器编译的软件不能在基于ARM的机器上运行,为 Linux构建的软件也不能在Windows上运行。

Docker通过支持多架构(multi-arch)镜像满足了容器应用的多CPU架构的需求。您可以为需要支持的每个架构构建单独的镜像,然后作为一个集合将所有镜像绑定在Docker清单的列表中。然后,您可以通过其名称和标签部署生成的多架构镜像——Docker客户端将自动选择与目标架构匹配的镜像。

基于Artifactory的Docker仓库可以很方便地构建多架构镜像,而且可以像管理其他任何Docker镜像一样来管理这些多架构镜像。本文我们将向您展示如何在开发/交付流程流程中来创建和管理多架构Docker镜像。

二、构建多架构镜像

多架构镜像

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

x86-64环境,例如 Linux 桌面;

AWS EC2上基于ARM的A1 实例。

为了能够在任何一个上运行,我们需要一个支持amd64和arm64架构的多架构镜像。

基于Buildx创建多架构镜像

首先,我们的DockerFile必须配置为根据所需的架构来创建示例镜像,如下所示:

ARG ARCH=

FROM ${ARCH}debian:buster-slim

RUN apt-get update \

&& apt-get install - y curl \

&& rm -rf /var/lib/apt/lists/*

ENTRYPOINT [ “curl” ]

如果我们使用这个DockerFile运行docker build命令,并使用--build-arg选项来设置ARCH参数,我们可以为每个所需的架构构建一个独立的镜像。然后我们需要构建一个单独的清单列表(使用docker manifest命令)将它们绑定到一个多架构镜像中。

除此之外,还有一种更简单、更推荐的方法。使用Docker CLI的Buildx插件(参见https://docs.docker.com/buildx/working-with-buildx/),您可以直接创建一个多架构镜像,并利用同一条Docker CLI命令行将构建好的多架构镜像推送到Artifactory中的Docker仓库里。如下所示:

$ docker buildx build \

--push \

--platform linux/amd64,linux/arm64 \

--output=type=image,push=true,registry.insecure=true \

--tag myartifactory/docker-local /multiarch-image:tag .

如果您使用的是Mac或Windows上的Docker Desktop,那么Buildx已经随着装好了。如果您使用的是Linux,则可以从GitHub安装Buildx。

(参见https://github.com/docker/buildx

Artifactory里的多架构镜像

以下是上一节创建的multiarch-image多架构镜像在Artifactory中的存储方式,该镜像存储在名为docker-local的Docker仓库中。

► Docker清单列表

Docker生成的清单列表(list.manifest.json)是多架构镜像“镜像清单的清单”,也称为“富清单”,它标识了集合中的 Docker 镜像以及每个镜像要运行的架构(操作系统和处理器组合)。

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

► 架构镜像

每个被支持架构的镜像都有自己的标签,可以通过它来寻址,这个标签是Artifactory通过组合发布标签和架构名称来创建的。由于我们的示例使用发布标签“tag”,因此架构镜像的标签是tag-linux-amd64和tag-linux-arm64。

每个镜像也有自己的清单,用于标识组成它的层。

三、晋级多架构镜像

一旦您的多架构镜像位于Artifactory的Docker仓库并通过了测试,您就可以将该镜像晋级到下一个成熟度的Docker仓库,就像其他任何类型的制品仓库一样。

如下的JFrog CLI命令将我们在docker-local仓库中创建的多架构映像晋级到docker-target仓库中:

$ 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 对多架构镜像的支持,您工作流程的最佳实践将得以保留。您仍然可以只构建一次,然后在开发、测试和生产阶段晋级您的不可变、多架构镜像。

访问JFrog官网:https://www.jfrogchina.com/,获取更多咨询

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容